gpt4 book ai didi

c++ - 如何使用 std::function 指向函数模板

转载 作者:IT老高 更新时间:2023-10-28 22:22:57 27 4
gpt4 key购买 nike

#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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com