Come ottenere l'indirizzo di una funzione di membro sovraccaricato?
-
22-08-2019 - |
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.
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.