【发布时间】:2018-01-02 23:29:00
【问题描述】:
我无法编译我的代码。我希望能够声明一个将另一个函数(或定义了 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 中可以做这样的事情吗?
【问题讨论】:
-
您希望将函数作为模板参数而不是普通函数参数传递的原因是什么?因为有了函数参数,它在任何版本的 C++ 中都非常容易(并且也反映了 C++ 标准库如何处理可调用参数)。
-
将
template<class T, T F>更改为template<class T, T(&F)(T,T)>