2012-04-24 13 views
5

可能性の重複:私は、各派生クラスは、与えられた仮想関数をオーバーライドし、呼び出すことによって、その実装を起動するためのクラス階層構造を持っている
How to force child same virtual function call its parent virtual function firstどのようにすべての派生クラスでオーバーライドされたメソッドを呼び出すため

その親クラスの1つ目的は、派生した実装のそれぞれを実行させることですが、私はそれをやり方が好きではありません。

例えば、私はこのクラスを持っている:

class base 
{ 
public: 
    void do_stuff() { do_something(); } 
    virtual void do_something() { } 
}; 

その後、私はいくつかのレベルで、このクラスを派生:

class derived_10: 
    public derived_9 // which inherit from derived_8 and so on until derived_0 
        // which inherit from base 
{ 
public: 
    virtual void do_something() 
    { 
    // this will also call derived_8::do_something() and so on 
    // until base::do_something() 
    derived_9::do_something(); 

    // then, some stuff 
    } 
}; 

私は確信してすべてのderived_xことになります解決策を探しています: :do_something()は、base :: do_stuff()が呼び出されたときに派生クラスがこれを自分自身で行うことを期待せずに、順番に呼び出されます。あなたはこの行動をとるための最良の方法を知っていますか?

+4

継承階層が深いのはなぜですか? – Cameron

+0

この質問は二重引用符(dup)として閉鎖されています。私はこれに答えるつもりだった。このコメントは、行う必要があります。どうすれば[this](http://codepad.org/MtRoQ6Bg)のようになりますか? – greatwolf

+0

@cameronの場合、階層はword_item < - renderable_item < - character < - monster < - playable_character < - heroのようなゲームオブジェクトを記述する。それは10のクラスの深さを持っていませんが、それはまだかなり大きくなります。 – Julien

答えて

3

前に、私はすでに非常によく似た質問をしてきました:私は受け入れられてきた答えは独自のソリューションで指摘Calling overriden class methods as a chain in C++

。私はあなたに代案についての考えを与えることができます。コンストラクターとデストラクタは既にC++でこの動作をしていますので、階層内のクラスに属するオブジェクトの構築または破壊中に作業が行われるように、コードの再構築を検討することをお勧めします。私はあなたが努力の価値があることができるだろうとは思えません。一方、テンプレートのメタプログラミング+プリプロセッサの魔法から何が得られるのかは決して分かりません。

関連する問題