在C ++ 14中,我可以编写一个lambda,它可以完美地转发任意数量的参数:
template<typename... Args>
void process(Args&&... args); // template to forward to
auto wrapper = [](auto&&... args)
{
std::cout << "Invoking lambda wrapper\n";
process(std::forward<decltype(args)>(args)...); // do the forwarding
};
使用bind
有没有办法达到同样的效果?我知道bind
创建的函数对象接受任意数量的参数,我知道这些对象对未绑定的参数使用完美转发,但有没有办法告诉bind
创建一个函数对象在传递给它的每个参数上使用完美转发,即使在bind
的调用中没有占位符?
答案 0 :(得分:4)
目前无法实现,但请参阅http://cplusplus.github.io/EWG/ewg-complete.html#44以获取支持该建议的建议:
随着越来越多的可变函数在我的C ++代码中运行,我越来越恼火,因为它没有可变参数。对于究竟要使用什么,有一点点烦恼。在我看来,有两个明智的选择(其他人可能有其他人)
1)_args:使用所有其他未命名的参数 2)_3向日:从第3个开始的所有论点。
我个人没有发现需要多种可变参数,或者更复杂的斩波(例如获取最后几个参数),并且如果可能的话,我希望保持这么简单! / p>