Почему этот указатель на код функции C ++ генерирует ошибку компиляции? - PullRequest
1 голос
/ 26 ноября 2009

Может кто-нибудь решить это? Кажется, я нигде не могу найти решение, но не вижу логической причины, почему строка ниже (с комментарием, показывающим ошибку компиляции) должна быть проблемой.

Примечание : Этот вопрос является производным от Как базовый класс C ++ может определить во время выполнения, был ли метод переопределен?

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”;
        }
};

1 Ответ

12 голосов
/ 26 ноября 2009

ISO C ++ запрещает брать адрес неквалифицированной или заключенной в скобки нестатической функции-члена для формирования указателя на функцию-член. Это заботится о искалечении имени. Поэтому то, что вы пытаетесь сделать, не будет работать в совместимом со стандартом компиляторе C ++.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...