1. ホーム
  2. c++

[解決済み] 可変個体関数のすべての引数に対してstd::forwardをどのように呼び出すか?

2022-07-15 04:25:41

質問

私はちょうど汎用オブジェクトファクトリを書いていて、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)...);
}

... は、左側にあるものを取り、それぞれのテンプレート・パラメータについて、それに応じて解凍してください、と言っています。