0

在 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

4

1 回答 1

4

目前不可能,但请参阅http://cplusplus.github.io/EWG/ewg-complete.html#44以获得支持它的建议:

随着越来越多的可变参数函数进入我的 C++ 代码,我越来越恼火没有可变参数绑定。确切地使用什么有点烦恼。在我看来,有 2 个明智的选择(其他人可能有其他人)

1) _args :使用所有未命名的参数。
2) _3onwards : 从第 3 次开始的所有参数。

我个人还没有发现需要多个可变参数范围或更复杂的斩波(例如获取最后几个参数),我希望尽可能保持简单!

于 2014-07-16T10:55:22.340 回答