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.

Était-ce utile?

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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top