我有一些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
我猜这个问题在于组合模板和传递函数作为参数,但我不知道如何解决这个问题。 (我不想用不同的类型写两次函数)。有解决方案吗
答案 0 :(得分:1)
错误消息表明T
的模板参数推断不一致 - 即返回的fn
类型和num
的类型在您的第二个代码段中有所不同。
这可以通过几种方式解决,其中以下一种可能是最简单的方法:
template<class T, class R>
bool function(QString *text, T number, R (*f)(QString, bool)) {
// [..]
T col = f(c, &ok); // Cast if necessary. Dereferencing is superfluous, btw.
// [..]
return true;
}
或者,甚至比这简单,
template<class T, class F>
bool function(QString *text, T number, F f) {
bool ok = true;
QString c = "hello";
T col = f(c, &ok);
// [..]
return true;
}