在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抛出一个更明显的错误?
它的完成方式是基类方法不是虚拟的,并且调用受保护的虚方法.
当然,这只处理一个级别.
在您的特定情况下,大量的基础设施可以使其工作,但它不值得.
典型的回应是添加评论
// Always call base class method
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2983 次 |
| 最近记录: |