2010-05-12 89 views
68

我只是在写一个通用对象工厂,并使用boost预处理器元库来创建一个可变参数模板(使用2010,但不支持它们)。我的函数使用rval引用和std::forward来完成转发,它让我想到了......当C++ 0X出来并且我有一个标准的编译器时,我会用真正的可变参数模板来做到这一点。尽管如此,我会在参数上调用std::forward吗?如何在可变参数函数中的所有参数上调用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,我还没有到那里。有更快的语法可以工作吗?

回答

103

你会做:

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

...几乎说“采取什么样的左边,并为每个模板参数,因此解压。”

+0

再加上如何传递参数。我认为教程显示'void f(Params && ... params)' – UncleBens 2010-05-12 17:32:55

+0

@Uncle:补充,我认为你是对的。 – GManNickG 2010-05-12 17:36:50

+58

谈论像海盗一天,我使用'void f(Ar && ... arg)' – woolstar 2014-01-25 07:41:46

相关问题