所以c++17的std::function
Deduction Guides如下:
int foo();
我可以做到:
std::function bar(foo);
但是我被困在c++14编译器上。在那里,我必须做更多类似的事情:function<int()> bar(foo)
。我想知道是否有一种方法可以创建std::function
而无需传递函数指针和显式提供函数签名?因此,例如make_pair
将根据其参数推断出返回类型。我想知道是否可以使用c++14为function
写类似的东西,例如:
auto bar = make_function(foo);
这可行吗?
注意:我的真实情况是foo
是一个模板函数,带有很多我不想推断的参数。因此,我的动机是生成function
而无需提供参数类型的。
答案 0 :(得分:3)
您的问题最后要有最重要的部分。如果您的foo
是模板,C ++ 17推论指南将无法通过简单的语法来帮助您
std::function f(foo);
您仍然需要为foo
提供模板参数。假设您可以指定foo
的参数类型(如您所愿)就可以了,那么编写make_func是一个简单的练习:
template<class R, class... ARGS>
auto make_func(R (*ptr)(ARGS...)) {
return std::function<R (*)(ARGS...)>(ptr);
}
比您使用的还要多:
auto bar = make_func(&foo<Z, Y, Z>);