#include <functional>
int func(int x, int y)
{
return x+y;
}
int main()
{
typedef std::function<int(int, int)> Funcp;
Funcp funcp = func;
return 0;
}
但是可以指向模板函数吗?
#include <functional>
template<class T>
T func(T x, T y)
{
return x+y;
}
int main()
{
typedef std::function<?(?, ?)> Funcp;
Funcp funcp = func;
return 0;
}
最佳答案
C++ 中没有模板函数这样的东西——人们随便提到的“模板函数”实际上是函数模板:定义函数的模板。
因此,上面第二个示例中的 func
不是函数,它是(函数)模板,它不能像函数一样使用。特别是 std::function
期望提供一个函数。
如何解决此问题取决于您要达到的目标。如果您试图使使用该函数的代码适用于任何类型,您只需将该代码放在函数或类模板中:
template <typename T>
void use_function(T t) {
typedef std::function<T(T,T)> Funcp = func<T>;
// use Funcp here
}
然而,你不能做的是使用带有通用类型量词的后期绑定(bind)(“可以应用于任何类型”),因为“可以应用于任何类型”必须在编译时解决C++。这就是它的滚动方式。
关于c++ - 如何使用 std::function 指向函数模板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5153148/