构造函数的单例方法

时间:2013-08-15 20:40:00

标签: c++ oop object

我试图将一个对象从一个类构造函数传递给另一个,但是,它似乎并不想工作。以下是代码:

我有以下课程:

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;
};

我有多个类HammingHanning,它们都继承自类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&'

我认为这是因为即使Window继承Barlett,我也无法将Barlett转换为Window

如果有人有任何建议,那将是非常好的:)

1 个答案:

答案 0 :(得分:1)

基本上你是在尝试创建一个工厂,但是你是在构造函数中做的。这没有意义。把它放在其他地方:

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