如何在所有派生类中调用重写方法

时间:2012-04-24 19:30:35

标签: c++

  

可能重复:
  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
  }
};

我正在寻找一种解决方案,以确保在调用base :: do_stuff()时将按顺序调用所有derived_x :: do_something(),而不必期望派生类本身执行此操作。您是否了解获得此行为的最佳方式?

1 个答案:

答案 0 :(得分:3)

我之前已经问了一个非常相似的问题:Calling overriden class methods as a chain in C++

我接受的答案指出了你自己的解决方案。我可以给你一个关于替代方案的想法。构造函数和析构函数已经在C ++中具有此行为,您可能需要考虑重构代码,以便在构造或销毁属于层次结构中的类的对象期间完成工作。我不确定你是否能够让这个值得付出努力。另一方面,你永远不知道你可以从一些模板元编程+一些预处理器魔法中得到什么。