需要重写虚函数来调用基本实现

Cra*_*rks 16 c++

在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!
   }
}
Run Code Online (Sandbox Code Playgroud)

是否有一种方法,一些模板技巧或语法噱头,使CDD抛出一个更明显的错误?

Jos*_*hua 9

它的完成方式是基类方法不是虚拟的,并且调用受保护的虚方法.

当然,这只处理一个级别.

在您的特定情况下,大量的基础设施可以使其工作,但它不值得.

典型的回应是添加评论

// Always call base class method
Run Code Online (Sandbox Code Playgroud)