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.

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top