C++ 如何对变量函数中的所有参数调用std::forward?

C++ 如何对变量函数中的所有参数调用std::forward?,c++,c++11,variadic-templates,rvalue-reference,perfect-forwarding,C++,C++11,Variadic Templates,Rvalue Reference,Perfect Forwarding,我刚刚编写了一个通用对象工厂,并使用boost预处理器元库创建了一个可变模板(使用2010,它不支持它们)。我的函数使用rval引用和std::forward来实现完美的转发,这让我想到……当C++0X出现时,我有了一个标准的编译器,我会用真正的变量模板来实现这一点。但是,如何对参数调用std::forward template <typename ...Params> void f(Params... params) // how do I say these are rvalue

我刚刚编写了一个通用对象工厂,并使用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.
}
模板
void f(Params…Params)//我怎么说这些是右值引用?
{
y(std::forward(…params));/?-我怀疑这会起作用。
}
我能想到的唯一方法是需要手动打开…params的包装,而我也还不太清楚。有没有更快捷的语法可以使用?

您可以执行以下操作:

template <typename ...Params>
void f(Params&&... params)
{
    y(std::forward<Params>(params)...);
}
模板
无效f(参数&…参数)
{
y(标准:正向(参数)…);
}

几乎是说“取左边的内容,并对每个模板参数进行相应的解压缩。”

再加上参数的传递方式。我想教程会在《像海盗一样说话的日子》中显示
void f(Params&&…Params)
我使用
void f(Ar&…arg)
请解释选择右值引用的动机&&(而不是&引用或仅根据情况选择值)@DavidJ我认为这个动机已经融入了问题。然而,见: