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

StackOverflow https://stackoverflow.com/questions/705854

Вопрос

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

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 не перегружен, но не в приведенном выше примере.Любое предложение?

РЕДАКТИРОВАТЬ

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

Это было полезно?

Решение

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top