Как базовый класс C ++ может определить во время выполнения, был ли метод переопределен?
Приведенный ниже пример метода предназначен для определения того, был ли он переопределен в производном классе. Ошибка, которую я получаю из MSVC, подразумевает, что просто неправильно пытаться получить указатель функции на «связанный» член, но я не вижу логической причины, почему это должно быть проблемой (в конце концов, это будет вthis-> виртуальные таблицы). Есть ли нехакерный способ исправить этот код?
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”;
}
};