3

継承の問題が発生しており、ソリューションがエレガントかどうかわかりません。こんな授業があります

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

}

これを行うためのより良い方法があるかどうかを知りたい (例: テンプレートを使用する必要なし)

4

1 に答える 1