构造函数的Singleton方法

Singleton approach on constructor

本文关键字:方法 Singleton 构造函数      更新时间:2023-10-16

我试图将一个对象从一个类构造函数传递到另一个类构造器,但它似乎不起作用。下面是代码:

我有以下课程:

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&'

我想这是因为即使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