Comment obtenir l'adresse d'une fonction de membre surchargé?
-
22-08-2019 - |
Question
Je suis en train d'obtenir un pointeur vers une version spécifique d'un surcharge fonction membre. Voici l'exemple:
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
}
};
Le message d'erreur est « erreur C2440: « initialisation »: ne peut pas convertir de « fonction surchargée » à« MemberFunctionType »
Cela fonctionne si f
n'est pas surchargé, mais pas dans l'exemple ci-dessus. Toute suggestion?
EDIT
Attention, le code ci-dessus ne reflète pas mon problème dans le monde réel, ce qui était que je l'avais oublié un « const » - c'est ce que la réponse acceptée souligne. Je vais laisser la question comme il est, cependant, parce que je pense que le problème pourrait arriver à d'autres.
La solution
Eh bien, je vais répondre à ce que je mets comme commentaire déjà il peut être accepté. Le problème est avec 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;
}
};
Précision:
La question initiale ne contenait que const
. Je l'ai fait une supposition sauvage dans les commentaires s'il a peut-être f
étant une fonction membre const dans le code réel (car à un encore plus tôt itération, il est apparu encore une autre chose manquait / différent du code dans le monde réel: p). Il avait en fait étant une fonction membre const, et m'a dit que je devrais poster cela comme une réponse.