5
我有一些C++函數,看起來像如下:傳遞函數與模板的返回值參數
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;
}
我從外面調用它以下列方式
double num = 0.45;
double (*fn)(QString, bool) = &doubleFromString;
function(&text, num, fn);
和(編輯)
unsigned int num = 5;
int (*fn)(QString, bool) = &intFromString;
function(&text, num, fn);
我得到錯誤
template parameter T is ambigious
我想這個問題是在組合模板和傳遞函數作爲參數,但我不知道如何弄清楚。 (我不想用不同類型的函數兩次寫這個函數)。任何解決方案
我取代'QString'用'性病:: string',這不應該有所作爲,而我[無法重現](http://coliru.stacked-crooked.com/a/f18cb5b956581425)它。 – chris 2015-03-31 16:16:53
我也不能重現這個,但是你可以通過調用'function(&text,num,fn)' –
2015-03-31 16:17:48
來重寫模板參數推導。在你的(編輯過的)例子中,'number'參數是'unsigned int',而你的函數指針返回'int'。那些不是相同的類型,因此編譯器錯誤。 – 2015-03-31 16:29:09