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