我遇到了继承问题,我不知道我的解决方案是否优雅。我有这样的课程
class Var
{
public:
virtual void doSomething();
}
class DerivedVar : public Var
{
public:
virtual void doSomething();
void doSomethingElse();
}
我还有从MyBase继承的MyDerived。 MyBase有一个Var类型的成员,而MyDerived需要有DerivedVar的成员,所以它可以调用doSomething()。目前,我正在使用模板来解决这个问题
template<typename VarType>
class MyBase
{
protected:
VarType var;
public:
MyBase() { var.doSomething(); }
}
class MyDerived : public MyBase<DerivedVar>
{
public:
MyDerived() : MyBase() { var.doSomethingElse(); }
}
我想知道是否有更好的方法(例如,无需使用模板)
答案 0 :(得分:1)
如果您想要或需要避免模板化,那么您需要动态分配协变类型数据成员。
然后一个好的方法是将工厂传递给构造函数链(它可以是默认的构造函数参数),并在基类中调用它。
20世纪90年代初非常流行的一种非常流行的方法是使用两阶段初始化。
好的,我预计你还没有遇到过这个问题。
但你会的。 ; - )
那就是说,如果你能使模板方法工作最好的话。
最直接的解决方案,最少量的解决方法以及代码和设计适应性。