C ++工厂用于组合模板参数

时间:2014-05-13 10:17:56

标签: c++ templates inheritance factory factory-pattern

我的问题与主题here有关。

假设我有以下简化结构:

struct Base
{/* ... abstract implementation ...*/};

template<int i>  //simplified. In my real code, some other classes follow. 
struct Derived : public Base
{/* ... implementation ...*/};

现在,例如,为了在运行时获得随机创建,我可以设置一个简单的工厂,它接受我的整数并返回相应的基指针:

std::unique_ptr<Base> createDerived(int i)  //again, in the real code, some more enums follow to determine the other classes
{
     if(i==1) {return std::unique_ptr<Derived<1> >(new Derived<1>());}
     else if(i==2) {return std::unique_ptr<Derived<2> >(new Derived<2>());}
     // ...
     else if(i==10000 /*say*/) {return std::unique_ptr<Derived<10000> >(new Derived<10000>());}
}

但是,在链接的帖子中,回答者建议不要这样做。

所以,我的问题是为什么?这已经是人们所谓的糟糕设计吗?我在这里看到的唯一缺点是

  • 源代码可能会爆炸(...但是,我的课程是&#34;小&#34;,即只包含少量和小数据成员)
  • 我必须维护工厂(除非我使用一些聪明的方法进行自动注册)。

另一方面,可以利用派生类的通用设计的灵活性和效率等所有优点,并且如果需要,还可以使用整个继承-Base-class-pointers-thing。

对我而言,似乎两全其美......你在想什么?

0 个答案:

没有答案