2012-04-24 108 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++中已经存在这种行为,您可能需要考虑重构代码,以便在构建或销毁属于层次结构中类的对象时完成工作。尽管如此,我不确定你会为此付出多大的努力。另一方面,你永远不知道你可以从模板元编程+某些预处理器魔法中获得什么。

相关问题