Frage

Ich versuche, einen Zeiger auf eine bestimmte Version von zu bringen überladen Mitgliedsfunktion. Hier ist das Beispiel:

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

Die Fehlermeldung lautet "Fehler C2440: 'Initialisierung': Kann nicht von 'überlasteter Funktion' in 'memberFunctionType' konvertiert werden.

Dies funktioniert, wenn f ist nicht überladen, aber nicht im obigen Beispiel. Irgendein Vorschlag?

BEARBEITEN

Vorsicht, der obige Code spiegelte mein Problem der realen Welt nicht wider, dass ich eine "const" vergessen hatte - darauf weist die akzeptierte Antwort darauf hin. Ich werde die Frage so lassen, wie sie ist, weil ich denke, dass das Problem anderen passieren könnte.

War es hilfreich?

Lösung

Nun, ich werde antworten, was ich bereits als Kommentar abgibt, damit es akzeptiert werden kann. Das Problem ist mit 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;
  }
};

Klärung:

Die ursprüngliche Frage enthielt das nicht const. Ich habe eine wilde Vermutung in den Kommentaren gemacht, ob er möglicherweise hat f Als Const-Mitgliedsfunktion im realen Code (weil es bei einer früheren Iteration sich herausstellte, fehlte eine andere Sache im realen Code: P). Er hatte tatsächlich eine Const -Mitgliedsfunktion und sagte mir, ich sollte dies als Antwort posten.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top