我可以在不提供参数的情况下生成函数吗?

时间:2019-03-04 19:23:35

标签: c++ function c++14 c++17 template-deduction

所以std::function Deduction Guides如下:

int foo();

我可以做到:

std::function bar(foo);

但是我被困在编译器上。在那里,我必须做更多类似的事情:function<int()> bar(foo)。我想知道是否有一种方法可以创建std::function而无需传递函数指针显式提供函数签名?因此,例如make_pair将根据其参数推断出返回类型。我想知道是否可以使用function写类似的东西,例如:

auto bar = make_function(foo);

这可行吗?

注意:我的真实情况是foo是一个模板函数,带有很多我不想推断的参数。因此,我的动机是生成function 而无需提供参数类型的

Live Example

1 个答案:

答案 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>);