我无法编译代码。我希望能够声明一个函数,它接受另一个函数(或者定义了operator()或lambda表达式的类作为参数),并且该函数也有模板参数。以下是我想要做的一个例子:
template <class T, T F>
T execF(T a, T b)
{
return F(a, b);
}
template <class T>
T add(T a, T b)
{
return a + b;
}
int main()
{
std::cout << execF<int, add>(3,4) << std::endl;
}
是否有可能在C ++ 14中做这样的事情?
答案 0 :(得分:0)
应该是:
template <class T, T F(T, T)>
T execF(T a, T b)
{
return F(a, b);
}
如果你想省略所有模板参数,我建议坚持使用Some Programmer Dude的注释并接受该函数作为函数参数:
template <typename T>
T execF(T a, T b, T f(T, T))
{
return f(a, b);
}
template <typename T>
T add(T a, T b) { return a + b; }
int main(int , char **)
{
auto x = execF(41.8f, 0.2f, add); //all params deduced in both functions
std::cout << x << std::endl;
x = execF(27, 15, add); //idem
std::cout << x << std::endl;
return 0;
}