考虑以下基类,它将计算我调用 CallDerivedFunction 的次数:
class B {
public:
B() {numCalls = 0;}
void CallDerivedFunction() {numCalls++; DerivedFunction();}
int GetNumCalls() {return numCalls;}
private:
virtual void DerivedFunction() = 0;
int numCalls;
};
除了我之外,其他人将编写实现 DerivedFunction 的派生类。但是,我试图计算调用 DerivedFunction 的次数。
有什么方法可以防止派生类 D 直接调用它自己的 DerivedFunction 实现,例如。不允许:
class D : public B {
private:
void DerivedFunction() {
if(<some condition>) DerivedFunction(); // I don't want to allow this.
if(<some condition>) CallDerivedFunction(); // This is OK.
}
};
注意:好的,当然这是一个简化;更普遍的问题是,当我的基类应该充当管理器并为派生类的集合执行跟踪使用模式等操作时,我可以强制派生类通过管理器类调用吗?还是我必须依靠派生类开发人员来做正确的事情?