可以绑定用于转发可变数量的参数吗?

时间:2014-07-14 20:25:50

标签: c++ c++14 perfect-forwarding stdbind

在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的调用中没有占位符?

1 个答案:

答案 0 :(得分:4)

目前无法实现,但请参阅http://cplusplus.github.io/EWG/ewg-complete.html#44以获取支持该建议的建议:

  

随着越来越多的可变函数在我的C ++代码中运行,我越来越恼火,因为它没有可变参数。对于究竟要使用什么,有一点点烦恼。在我看来,有两个明智的选择(其他人可能有其他人)

     

1)_args:使用所有其他未命名的参数    2)_3向日:从第3个开始的所有论点。

     

我个人没有发现需要多种可变参数,或者更复杂的斩波(例如获取最后几个参数),并且如果可能的话,我希望保持这么简单! / p>