【发布时间】:2015-03-12 15:27:47
【问题描述】:
如果我在 C++11 中有一个模板函数,那么是否可以将其包装在 std::function 中?
我的问题是这样的:
我有一个通用函数(比如 sum 函数),其中返回类型取决于参数的类型:
template <typename T>
auto sum(T const& a, T const& b) -> decltype(a+b)
{
return a + b;
}
我想将它包装在 std:function 中以用于特定的参数类型(比如 int)。我正在尝试以下方法:
int main()
{
std::function<int(int,int)> intsum = std::bind(static_cast<int(*)(int,int)>(&sum), std::placeholders::_1, std::placeholders::_2);
auto mysum = intsum(2, 4);
std::cout << mysum << std::endl;
return 0;
}
但是编译上面的代码会报错:
error: invalid static_cast from type ‘<unresolved overloaded function type>’ to type ‘int (*)(int, int)
有什么方法可以实现我想要做的吗?
【问题讨论】:
-
你试过
sum<int>吗? -
模板函数不是函数。如果您使用正确的名称函数模板,则表明您还没有处理函数。
标签: c++ templates c++11 std-function stdbind