如何在可变参数函数中的所有参数上调用std :: forward?

Edw*_*nge 101 c++ rvalue-reference variadic-templates perfect-forwarding c++11

我只是编写一个通用对象工厂并使用boost预处理器元库来创建一个可变参数模板(使用2010并且它不支持它们).我的函数使用rval引用并std::forward进行完美的转发,它让我思考...当C++ 0X出来并且我有一个标准编译器时,我会使用真正的可变参数模板.但是,我怎么称呼std::forward这些论点?

template <typename ...Params>
void f(Params... params) // how do I say these are rvalue reference?
{
    y(std::forward(...params)); //? - I doubt this would work.
}
Run Code Online (Sandbox Code Playgroud)

我能想到的唯一方法就是需要手动拆包... params,我也不是那里.是否有更快的语法可行?

GMa*_*ckG 141

你会这样做:

template <typename ...Params>
void f(Params&&... params)
{
    y(std::forward<Params>(params)...);
}
Run Code Online (Sandbox Code Playgroud)

...相当多说,"采取什么样的左边,并为每个模板参数,因此解压."

  • 在像海盗日这样的谈话中,我使用`void f(Ar && ... arg)` (82认同)
  • @DavidJ 在这种情况下 &amp;&amp; 不是右值引用,而是转发(或通用)引用。与模板一起使用时,它可以绑定到任何引用类型。https://blog.petrzemek.net/2016/09/17/universal-vs-forwarding-references-in-cpp/ (7认同)