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

问题描述 投票:90回答:1

我只是编写一个通用对象工厂并使用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.
}

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

c++ c++11 variadic-templates rvalue-reference perfect-forwarding
1个回答
128
投票

你会这样做:

template <typename ...Params>
void f(Params&&... params)
{
    y(std::forward<Params>(params)...);
}

...几乎说“拿左边的东西,对于每个模板参数,相应地解压缩它。”

© www.soinside.com 2019 - 2024. All rights reserved.