131

私はちょうどジェネリック オブジェクト ファクトリを作成し、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 の手動アンパックを必要とすることであり、私もまだそこにいません。動作するより高速な構文はありますか?

4

1 に答える 1

191

あなたがするだろう:

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

ほとんどの...場合、「左側にあるものを取得し、各テンプレートパラメーターについて、それに応じて展開します」と言っています。

于 2010-05-12T17:31:29.780 に答える