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