一个人怎么能在可变参数函数里把所有的论点都说出来呢?

我只是写了一个通用的对象工厂和使用升级预处理器元库作出一个可变参数模板(使用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,我还没有完全到那里。有更快的语法吗?

56514 次浏览

你可以这么做:

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

...基本上是这样说的: “接受左边的内容,并且对于每个模板参数,相应地解压缩它。”