可変個引数テンプレートと省略記号 ("...") トークン
C 11 では、可変個引数テンプレートにより柔軟な数のテンプレートが可能になりますパラメータ。可変長引数テンプレートを定義する場合、省略記号 (...) トークンは重要な役割を果たします。
アンパックとパッキング
省略記号の位置によってその機能が決まります。
アンパックの例
次の可変個引数テンプレート関数を考えてみましょう:
<code class="cpp">template< class T, class... Args > unique_ptr<T> make_unique( Args&&... args ) { return unique_ptr<T>(new T(std::forward<Args>(args)...)); }</code>
複数の引数を指定して make_unique を呼び出す場合、(std::forward(Args>(args)... の) 省略記号を使用すると、関数は可変数の引数を受け入れることができます。省略記号は Args パラメーター パックを解凍し、その結果、次の展開された式:
<code class="cpp">std::forward<Arg0>(arg0), std::forward<Arg1>(arg1), ...</code>
テンプレートと関数の引数での省略記号の配置
テンプレート引数リストでは、省略記号がパラメータであることを示すために中央に配置されます。パックは関数パラメーター リストに継続されます。これは、可変個引数パラメーター パックの後に追加のテンプレート パラメーター (非可変個パラメーターなど) が存在する可能性があるためです。
関数の実装では、省略記号が最後に配置されます。これにより、残りの引数が単一のエンティティにパックされずに渡されることが保証されます。
追加のアプリケーション
省略記号次のような他のコンテキストでも使用できます。
以上が省略記号 (...) トークンは C 11 可変個引数テンプレートでどのように機能しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。