ho qualche funzione C++ che assomiglia segue:funzione di passaggio come argomento con il valore di modello di ritorno
template<class T> bool function(QString *text, T number, T (*f)(QString, bool)){
bool ok = true;
QString c = "hello";
T col = (*f)(c, &ok);
// do something with col here ...
return true;
}
sto chiamando da fuori nel modo seguente
double num = 0.45;
double (*fn)(QString, bool) = &doubleFromString;
function(&text, num, fn);
e (Edited)
unsigned int num = 5;
int (*fn)(QString, bool) = &intFromString;
function(&text, num, fn);
E ottengo l'errore
template parameter T is ambigious
Immagino che il problema sia nel combinare template e passare la funzione come argomento, ma non sono sicuro di come capirlo. (Non voglio scrivere la funzione due volte solo con tipi diversi). Qualche soluzione?
ho sostituito 'QString' con' std :: string', che non dovrebbe fare la differenza, e io [non posso riprodurre] (http://coliru.stacked-crooked.com/a/f18cb5b956581425) it. – chris
Non riesco a riprodurre questo, ma è possibile sovrascrivere la deduzione degli argomenti del template chiamando 'function (& text, num, fn)' –
Nel tuo esempio (modificato), l'argomento 'number' è un' unsigned int', mentre il tuo puntatore a funzione restituisce 'int'. Quelli non sono gli stessi tipi, quindi l'errore del compilatore. –