在C++类层级结构中,是否有可能强制要求一个特定的虚函数始终调用其基类的实现?(就像构造函数链一样?)
我正在研究一个深层类层次结构,在其中一些公共接口函数被每个子类覆盖。我希望每个派生类的重写可以链接到基类。使用下面的代码明确地实现这一点很简单,但是有可能会有人忘记将其链接到基类。
是否有某种模式可以强制要求这样做,以便编译器如果重写没有链接到基类,则会抛出错误?
因此,即
我正在研究一个深层类层次结构,在其中一些公共接口函数被每个子类覆盖。我希望每个派生类的重写可以链接到基类。使用下面的代码明确地实现这一点很简单,但是有可能会有人忘记将其链接到基类。
是否有某种模式可以强制要求这样做,以便编译器如果重写没有链接到基类,则会抛出错误?
因此,即
class CAA
{
virtual void OnEvent( CEvent *e ) {
// do base implementation stuff;
}
}
class CBB : public CAA
{
typedef CAA BaseClass;
virtual void OnEvent( CEvent *e ) {
DoCustomCBBStuff();
BaseClass::OnEvent( e ); // chain to base
}
}
class CCC : public CBB
{
typedef CBB BaseClass;
virtual void OnEvent( CEvent *e ) {
Frobble();
Glorp();
BaseClass::OnEvent( e ); // chain to CBB which chains to CAA, etc
}
}
class CDD : public CCC
{
typedef CCC BaseClass;
virtual void OnEvent( CEvent *e ) {
Meep();
// oops! forgot to chain to base!
}
}
有没有一种方法,通过某些模板技巧或语法诡计,使CDD抛出更明显的错误?