汎用オブジェクトファクトリを記述し、ブーストプリプロセッサメタライブラリを使用して可変テンプレートを作成していました(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)...);
}
...
は、「左側にあるものを取り出し、各テンプレートパラメータについて、それを適切に展開します」と言っています。