¿Cómo obtener la dirección de una función miembro sobrecargada?
-
22-08-2019 - |
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.
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.