我只是在编写一个通用对象工厂并使用 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 ,我也还没到那里。有没有更快的语法可以工作?
你会这样做:
template <typename ...Params>
void f(Params&&... params)
{
y(std::forward<Params>(params)...);
}
...
几乎说“取左边的内容,并为每个模板参数相应地解包。”
不定期副业成功案例分享
void f(Params&& ...params)
void f(Ar&& ...arg)