Подтвердить что ты не робот

Как получить адрес перегруженной функции-члена?

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

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

Сообщение об ошибке "error C2440:" initializing ": невозможно преобразовать из" перегруженной функции "в" MemberFunctionType ""

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

ИЗМЕНИТЬ

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

4b9b3361

Ответ 1

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

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 в реальном коде (потому что на еще более ранней итерации оказалось, что еще одна вещь отсутствует/отличается от реального кода: p). На самом деле он имел функцию const member и сказал мне, что должен опубликовать это как ответ.