我尝试编写一个函数(称之为apply_args()
),它接受一个特定的函数或函数对象以及用于调用此对象的参数,并使用完美转发来调用它。
示例:
auto fun = [](std::string a, std::string const& b) { return a += b; };
std::string s("world!");
// s is passing by lvalue ref,
// temporary object by rvalue ref
s = apply_args(fun, std::string("Hello, "), s);
我该如何实现该功能?
答案 0 :(得分:3)
reloadData()
答案 1 :(得分:0)
如果您接受将fun
lambda作为+fun
传递(在函数指针中进行转换),我想您可以简单地将apply_args()
写为
template <typename R, typename ... Fts, typename ... As>
R apply_args (R(*fn)(Fts...), As && ... as)
{ return fn(std::forward<As>(as)...); }
完整的例子
#include <string>
#include <iostream>
#include <functional>
template <typename R, typename ... Fts, typename ... As>
R apply_args (R(*fn)(Fts...), As && ... as)
{ return fn(std::forward<As>(as)...); }
int main ()
{
auto fun = [](std::string a, std::string const& b) { return a += b; };
std::string s("world!");
s = apply_args(+fun, std::string("Hello, "), s);
std::cout << s << std::endl;
}