以下のサンプル メソッドは、派生クラスでオーバーライドされているかどうかを検出するためのものです。MSVC から得られるエラーは、「バインドされた」メンバーへの関数ポインターを取得しようとするのは単に間違っていることを意味しますが、これが問題になる論理的な理由はわかりません (結局のところ、これはthis->vtableにあります) )。このコードを修正するハックではない方法はありますか?
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”;
}
};