c – 我可以在不提供参数的情况下生成函数吗?
作者:互联网
所以c++17有std::function
Deduction Guides所以给出:
int foo();
我可以:
std::function bar(foo);
但我坚持使用c++14编译器.我必须做更多的事情:function< int()>巴(富).我想知道是否有办法创建一个std ::函数而不传递函数指针并明确提供函数签名?因此,例如make_pair
将从它的参数中推断出它的返回类型.我想知道即使使用c++14我是否可以为函数编写类似的内容,例如:
auto bar = make_function(foo);
这可行吗?
注意:我的真实情况是foo是一个模板函数,有很多我不想推断的参数.所以我的动机是生成一个函数,而不需要提供参数类型.
解决方法:
你的问题在最后的细则中有一些最重要的部分.如果您的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