下面的示例方法旨在检测它是否在派生类中被重写。我从MSVC中得到的错误暗示着试图让函数指针指向一个“绑定”成员是完全错误的,但我没有看到为什么这会成为一个问题的合乎逻辑的原因(毕竟,它将在this-> vtable)。有没有修复此代码的非哈希方式?C++基类如何在运行时确定方法是否已被覆盖?
class MyClass
{
public:
typedef void (MyClass::*MethodPtr)();
virtual void Method()
{
MethodPtr a = &MyClass::Method; // legal
MethodPtr b = &Method; // <<< error C2276: ‘&’ : illegal operation on bound member function expression
if (a == b) // this method has not been overridden?
throw “Not overridden”;
}
};
不幸的是,在基类和可能实现新方法或旧方法的类之间有许多中间类。我希望用这种方式来尽可能少地改变代码,但现在看起来不太可能。 – intepid 2009-11-26 07:49:16