其他分享
首页 > 其他分享> > c – 我可以在不提供参数的情况下生成函数吗?

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

作者:互联网

所以std::function Deduction Guides所以给出:

int foo();

我可以:

std::function bar(foo);

但我坚持使用编译器.我必须做更多的事情:function< int()>巴(富).我想知道是否有办法创建一个std ::函数而不传递函数指针并明确提供函数签名?因此,例如make_pair将从它的参数中推断出它的返回类型.我想知道即使使用我是否可以为函数编写类似的内容,例如:

auto bar = make_function(foo);

这可行吗?

注意:我的真实情况是foo是一个模板函数,有很多我不想推断的参数.所以我的动机是生成一个函数,而不需要提供参数类型.

Live Example

解决方法:

你的问题在最后的细则中有一些最重要的部分.如果您的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>);

标签:template-deduction,c,function,c14,c17,c++17,c++14,c++14
来源: https://codeday.me/bug/20191003/1845948.html