Como obter o endereço de uma função de membro sobrecarregada?
-
22-08-2019 - |
Pergunta
Estou tentando obter um ponteiro para uma versão específica de um sobrecarregado Função do membro. Aqui está o exemplo:
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
}
};
A mensagem de erro é "Erro C2440: 'Inicializando': não é possível converter de 'sobrecarregada-função' para 'membrofunctionType'"
Isso funciona se f
não está sobrecarregado, mas não no exemplo acima. Alguma sugestão?
EDITAR
Cuidado, o código acima não refletiu meu problema no mundo real, que eu havia esquecido uma "const" - é o que a resposta aceita aponta. Porém, vou deixar a pergunta, porque acho que o problema pode acontecer com os outros.
Solução
Bem, eu responderei o que eu coloco como comentário já para que possa ser aceito. O problema é com a constência:
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;
}
};
Esclarecimento:
A pergunta original não continha isso const
. Eu fiz um palpite selvagem nos comentários, se ele possivelmente tem f
Sendo uma função de membro const no código real (porque, em uma iteração ainda anterior, acabou sendo que outra coisa estava faltando/diferente do código do mundo real: P). Na verdade, ele era uma função de membro const e me disse que eu deveria postar isso como uma resposta.