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

标签 c++ templates function-pointers

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

相关文章:

C - 应用于矩阵的函数指针。段错误

c++ - 函数指针 vs 函数作为模板非类型参数

C++ 链接器无法解析来自其他源文件 *.obj 文件的外部符号(再次;)。 (VC++表达)

c++ - 单链表无限循环

c++ - 具有与模板相同类型非类型参数的默认类型参数

c++ - 去除 boost::fusion 序列中的引用

C++ 和 OpenCV : Issue Converting Image to grayscale

C++ 设计容器和管理列表返回

c++ - 为什么只能在头文件中实现模板?

c - 解释这些函数指针声明的区别