Domanda

Sto cercando di ottenere un puntatore a una versione specifica di un sovraccaricato funzione membro. Ecco l'esempio:

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

Il messaggio di errore è "l'errore C2440: 'inizializzazione': impossibile convertire da '-funzione in overload' a 'MemberFunctionType'"

Questo funziona se f non è sovraccarico, ma non nell'esempio di cui sopra. Ogni suggerimento?

Modifica

Attenzione, il codice di cui sopra non ha riflesso il mio problema del mondo reale, che è stato che avevo dimenticato un "const" - questo è ciò che indica la risposta accettata. Lascio la questione è, però, perché penso che il problema potrebbe accadere per gli altri.

È stato utile?

Soluzione

Bene, ti risponderò quello che ho messo come commento già in modo che possa essere accettato. Il problema è che con costanza:

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

Chiarimento:

La domanda iniziale non conteneva che const. Ho fatto un ipotesi nei commenti se egli forse ha f essere una funzione membro const nel codice reale (perché ad un'iterazione ancora prima, si è scoperto ancora un'altra cosa che mancava / diverso per il codice mondo reale: p). Egli in realtà aveva essendo una funzione membro const, e mi ha detto che dovrei pubblicare questo come una risposta.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top