我的问题与主题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>());}
}
但是,在链接的帖子中,回答者建议不要这样做。
所以,我的问题是为什么?这已经是人们所谓的糟糕设计吗?我在这里看到的唯一缺点是
另一方面,可以利用派生类的通用设计的灵活性和效率等所有优点,并且如果需要,还可以使用整个继承-Base-class-pointers-thing。
对我而言,似乎两全其美......你在想什么?