#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
}
然而,您将无法做的是使用通用类型量词的后期绑定(“可以应用于任何类型”),因为“可以应用于任何类型”必然在 C++ 中的编译时解析。事情就是这样滚动的。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)