【发布时间】:2012-02-01 03:46:52
【问题描述】:
在 C++ 类层次结构中,是否可以强制要求特定的虚函数也总是调用其基类的实现? (像构造函数链的方式?)
我正在研究一种情况,即深层类层次结构具有一些每个子级都覆盖的通用接口函数。我希望每个派生类的覆盖都链接到基类。使用下面的代码eg 明确地执行此操作很简单,但存在实现新派生类的人可能会忘记链接到基类的风险。
是否有某种模式可以强制执行此操作,这样如果覆盖无法链接基础,编译器会抛出错误?
所以,在
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 抛出更明显的错误?
【问题讨论】:
-
据我所知,你总是可以给基类一个非虚函数并存储一个函数指针列表,每个派生类都会添加它的一部分。
标签: c++