省略記号構文は C 11 の可変個引数テンプレート パラメーター パックでどのように機能しますか?

Susan Sarandon
リリース: 2024-10-30 10:52:03
オリジナル
791 人が閲覧しました

How does the ellipsis syntax work with variadic template parameter packs in C  11?

可変個引数テンプレートの省略記号構文

C 11 の可変個引数テンプレートでは、可変数のテンプレート引数を使用できます。このコンテキストにおける省略記号 (...) トークンの構文は、次の厳密な規則に従います:

アンパッキング/パッキング:
省略記号の位置によってその目的が決まります:

  • 右側 (パターン): テンプレート パラメーター パックを展開します。
  • 左側 (名前): パックされた引数を作成します。

展開:
... の左側のパターンが繰り返され、展開された各パターンがカンマ区切りの式で置き換えられます。

アプリケーション:
提供されたコード内:

<code class="cpp">return unique_ptr<T>(new T(std::forward<Args>(args)...));</code>
ログイン後にコピー
  • std::forward: は、単一のテンプレート パラメーターと引数を取る非可変個のテンプレート関数です。
  • アンパック: std::forward(args)... std::forward(arg0)、std::forward(arg1)、に展開されます。 ...、arg0、arg1、... は個々の引数です。

省略記号の配置の理由:
テンプレート引数リストとパラメータ リストでは、省略記号は、さまざまな展開を実現するために中央に配置されます。

  • テンプレート引数リスト: 省略記号により、引数の可変数が許可されます。
  • パラメータリスト: 省略記号により、引数が単一のパックされた引数として渡されることが保証されます。

追加メモ:

  • パターンには以下を含めることができます。アクセス指定子 (例: public)。
  • 省略記号は、配列の初期化に使用できます (例: {args, sizeof(T)})....
  • 構文は、次のいずれかに関係なく同じです。テンプレートがクラスであるか関数であるか。

以上が省略記号構文は C 11 の可変個引数テンプレート パラメーター パックでどのように機能しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!