有人能解决这个问题吗?我似乎在任何地方都找不到解决方案,但我看不出为什么下面的行(注释显示编译错误)应该是一个问题的逻辑原因。
Note:这个问题是How can a C++ base class determine at runtime if a method has been overridden?的衍生物
class MyClass
{
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”;
}
};发布于 2009-11-26 07:28:22
ISO C++禁止使用不合格或括号大小的非静态成员函数的地址来形成指向成员函数的指针。这就解决了名字损坏的问题。因此,您要做的工作在符合标准的C++编译器中是行不通的。
https://stackoverflow.com/questions/1802059
复制相似问题