web-dev-qa-db-ja.com

可変個の関数のすべての引数でstd :: forwardをどのように呼び出すのでしょうか?

汎用オブジェクトファクトリを記述し、ブーストプリプロセッサメタライブラリを使用して可変テンプレートを作成していました(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の手動での展開が必要であり、私もまだそこにはいません。動作するより速い構文はありますか?

95
Edward Strange

あなたがするだろう:

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

...は、「左側にあるものを取り出し、各テンプレートパラメータについて、それを適切に展開します」と言っています。

134
GManNickG