Как получить адрес перегруженной функции-члена? - PullRequest
18 голосов
/ 01 апреля 2009

Я пытаюсь получить указатель на конкретную версию перегруженной функции-члена. Вот пример:

class C
{
  bool f(int) { ... }
  bool f(double) { ... }

  bool example()
  {
    // I want to get the "double" version.
    typedef bool (C::*MemberFunctionType)(double);
    MemberFunctionType pointer = &C::f;   // <- Visual C++ complains
  }
};

Сообщение об ошибке «ошибка C2440:« инициализация »: невозможно преобразовать из« перегруженной функции »в« MemberFunctionType »»

Это работает, если f не перегружен, но не в примере выше. Любое предложение?

EDIT

Осторожно, приведенный выше код не отражает мою реальную проблему, заключающуюся в том, что я забыл «const» - на это указывает принятый ответ. Я оставлю вопрос таким, какой он есть, потому что я думаю, что проблема может случиться с другими.

1 Ответ

27 голосов
/ 01 апреля 2009

Хорошо, я отвечу на то, что я уже добавил в качестве комментария, чтобы его можно было принять. Проблема с константой:

class C
{
  bool f(int) { ... }
  bool f(double) const { ... }

  bool example()
  {
    // I want to get the "double" version.
    typedef bool (C::*MemberFunctionType)(double) const; // const required!
    MemberFunctionType pointer = &C::f;
  }
};

Пояснение:

Оригинальный вопрос не содержал этого const. В комментариях я сделал дикое предположение, возможно ли, что f является константной функцией-членом в реальном коде (потому что на более ранней итерации оказалось, что еще одна вещь отсутствует / отличается от реального кода: ). У него действительно была функция-член const, и он сказал мне, что я должен опубликовать это как ответ.

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