2016-12-08 15 views
-1

私は抽象クラスとその派生クラスを持っています。各派生クラスでメソッド呼び出しの再実装を避ける

派生クラスの名前を持つ抽象クラスにメンバー(つまり、fDerivedName)が必要です。

私は各派生クラスのコンストラクタで:

fDerivedName = this->ClassName(); 

各派生クラスでこのの再実装を回避する方法はありますか?

おかげ

+6

あなたは[MCVE]を投稿できますか? –

+3

はい。 CRTP。 'ClassName()'を直接呼び出すことができるときに 'fDerivedName'が必要な理由は明確ではありませんが、必要ならばそれを持つことができます。 –

+0

マクロを使用して再実装を簡略化する – alexeykuzmin0

答えて

1

あなたは、(もうその後、抽象的に純粋でない)基底クラスでコンストラクタを実装パラメータとして、派生クラスの名前を渡すと、コンストラクタの初期化子リストであなたの割り当てを行うことができます。

class Base 
{ 
public: 
    Base(const std::string& derived_class_name): 
     fDerivedName(derived_class_name) 
    { 
    } 
    ... 
}; 

もちろん、この基本クラスのコンストラクタを派生クラスの各コンストラクタから呼び出す必要があります。クラス名をパラメータとして渡す必要があります。派生クラスによって仮想関数ClassName()がオーバーロードされます。

関連する問題