我试图将一个对象从一个类构造函数传递到另一个类构造器,但它似乎不起作用。下面是代码:
我有以下课程:
class STFT {
public:
template<typename Inverse>
STFT(Inverse begin, Inverse end, size_t x, size_t y, WindowType type)
{
switch(type)
{
case 0:
this->w = Window(0, 100, this->w); // "0" is the type of window, 100 is the size, this-w is a reference to the object.
break;
case 1:
break;
}
}
protected:
Window w;
};
我有多个类Hamming
、Hanning
,它们都继承自类Window
。。我想做的是让Window
中的构造函数决定初始化哪个对象。。
Window(int theWindow, size_t size, Window& w)
{
switch(theWindow)
{
case 0:
w = new Barlett(100);
break;
//**
}
但我得到了以下错误:
no known conversion for argument 1 from 'Barlett*' to 'const Window&'
我想这是因为即使Barlett
是从Window
继承的,我也无法将Window
转换为Barlett
。
如果有人有任何建议,那就太棒了:)
本质上,您试图创建一个工厂,但您是在构造函数中创建的。这没有道理。放在其他地方:
class WindowFactory {
public:
static Window* create(int theWindow, size_t size)
{
Window *w;
switch(theWindow)
{
case 0:
w = new Barlett(100);
break;
//**
}
return w;
}
};
//....
Window *w = WindowFactory::create(0, 10);
注意:为了示例起见,我将其添加为静态方法,但为了灵活性和可测试性,您可能需要实例化一个具体的WindowFactory对象并在其上调用create
。