¿Cómo puede una clase base de C ++ determinar en tiempo de ejecución si un método ha sido anulado?
El siguiente método de muestra está destinado a detectar si se ha anulado o no en una clase derivada. El error que recibo de MSVC implica que es simplemente incorrecto intentar obtener el puntero de función a un miembro "vinculado", pero no veo ninguna razón lógica por la que esto debería ser un problema (después de todo, estará eneste-> vtable). ¿Hay alguna forma no hacky de arreglar este código?
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”;
}
};