Как получить адрес перегруженной функции-члена?
-
22-08-2019 - |
Вопрос
Я пытаюсь получить указатель на конкретную версию перегружен функция-член.Вот пример:
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).На самом деле он считал, что это константная функция-член, и сказал мне, что я должен опубликовать это как ответ.