可変引数テンプレートの "..." トークンの構文規則
C では、可変引数テンプレートを使用して、引数の可変数。 「...」トークンは、このコンテキストで重要な役割を果たし、引数パックまたはパラメータ アンパッカーとして機能します。
省略記号の配置の構文規則
「...」トークンの配置によってその機能が決まります:
例: "..." を含む可変個引数テンプレート
次の可変個引数テンプレートを考えてみましょう:
<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>
この例では、「...」は引数パックとして機能しますが、関数実装内の「...」は引数を args 変数に解凍します。
省略記号の配置が異なる理由
テンプレート引数リストとパラメータ リストの間の省略記号の配置の違いは、引数のパッキングとパラメータのアンパッキングの違いによるものです。テンプレート引数リストでは、「...」はパラメータが 1 つのパラメータ パックにパックされる必要があることを示します。一方、パラメータ リストでは、「...」は引数が個々のパラメータにアンパックされる必要があることを示します。
アンパック パターン
「...」がアンパッカーとして式の右側に表示される場合、特定のパターンに従います。
詳細使用法: 配列の初期化
省略記号は、配列の初期化にも使用できます:
<code class="cpp">struct data_info { boost::any data; std::size_t type_size; }; std::vector<data_info> v{{args, sizeof(T)}...}; //pattern = {args, sizeof(T)}</code>
これは、各要素が args と sizeof を含む構造体である値でベクトル v を初期化します。 (T) ペア.
結論として、可変個引数テンプレートのコンテキストにおける "..." トークンは、配置と解凍パターンの特定の構文規則に従って、引数パックとパラメーター アンパッカーの両方として機能します。柔軟な使用法により、強力なテンプレートの構築とカスタマイズが可能になります。
以上がC 可変長引数テンプレートで引数をパックおよびアンパックするには、「...」トークンをどのように使用しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。