W jaki sposób klasa bazowa C ++ może określić w czasie wykonywania, czy metoda została zastąpiona?
Poniższa przykładowa metoda ma na celu wykrycie, czy została ona zastąpiona w klasie pochodnej. Błąd, jaki otrzymuję od MSVC, oznacza, że po prostu próbuję dostać wskaźnik funkcji do „powiązanego” elementu, ale nie widzę logicznego powodu, dla którego miałby to być problem (w końcu będzie onto-> vtable). Czy jest jakiś niezręczny sposób naprawienia tego kodu?
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”;
}
};