Pregunta

Estoy intentando obtener un puntero a una versión específica de un sobrecargado función miembro.Aquí está el ejemplo:

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
  }
};

El mensaje de error es "error C2440:'inicializando':no se puede convertir de 'función sobrecargada' a 'MemberFunctionType'"

Esto funciona si f no está sobrecargado, pero no en el ejemplo anterior.¿Cualquier sugerencia?

EDITAR

Tenga cuidado, el código anterior no refleja mi problema del mundo real, que era que había olvidado una "constante"; esto es lo que señala la respuesta aceptada.Sin embargo, dejaré la pregunta como está porque creo que el problema podría pasarle a otros.

¿Fue útil?

Solución

Bueno, voy a responder a lo que he puesto como comentario ya para que pueda ser aceptada. El problema es que con constness:

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;
  }
};

Aclaración:

La pregunta original no contenía que const. Hice una conjetura salvaje en los comentarios si él posiblemente ha f ser un método constante en el código real (debido a una iteración aún antes, resultó otra cosa que faltaba / diferente al código del mundo real: p). De hecho tuvo que ser un método constante, y me dijo que debería publicar esto como una respuesta.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top