2012-04-24 85 views
5

可能重複:
How to force child same virtual function call its parent virtual function first如何調用被覆蓋的方法,所有派生類

我有一個類層次結構,其中每個派生類中重寫一個給定的虛擬功能,並通過調用開始其實施在其父級中的一個。目標是讓每個派生的實現都被執行,但我不喜歡我這樣做。

例如,我有這個類:

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 2012-04-24 19:34:59

+0

這個問題太糟糕了,以dup的形式結束。我即將發佈一個答案。這個評論將不得不做。那麼像[this](http://codepad.org/MtRoQ6Bg)這樣的東西呢? – greatwolf 2012-04-24 19:49:41

+0

@cameron,層次結構描述了遊戲對象,如word_item < - renderable_item < - character < - monster < - playable_character < - hero。它沒有10級的深度,但仍然變得相當大。 – Julien 2012-04-25 15:48:19

回答

3

我已經問過一個非常類似的問題:Calling overriden class methods as a chain in C++

答案我已經接受指着自己的解決方案。我可以給你一個關於替代的想法。構造函數和析構函數在C++中已經存在這種行爲,您可能需要考慮重構代碼,以便在構建或銷燬屬於層次結構中類的對象時完成工作。儘管如此,我不確定你會爲此付出多大的努力。另一方面,你永遠不知道你可以從模板元編程+某些預處理器魔法中獲得什麼。

相關問題