テンプレート引数とデフォルト テンプレートについて理解する
C では、テンプレート引数はクラス テンプレートと関数テンプレートを操作する上で不可欠な要素です。デフォルトのテンプレート引数を使用してクラス テンプレートを宣言する場合、オブジェクトの作成時に引数の指定を省略できますが、この動作には特定の制限が適用されます。
説明のために、次のコードを調べてみましょう:
<code class="cpp">template <typename T = int> class Foo { };</code>
このコードは、デフォルトのテンプレート引数 T = int を持つクラス テンプレート Foo を定義します。テンプレート引数
<code class="cpp">Foo me;</code>
を明示的に指定しなくても Foo のオブジェクトを作成できますが、この構文は C 17 でのみ導入されたことに注意することが重要です。それ以前は、次のコードが必要でした。
<code class="cpp">Foo<> me;</code>
山括弧 (<>) は、テンプレート引数が存在するが空であることを示します。この構文が必要なのは、コンパイラーがデフォルト値を使用している場合でも、T の型を認識する必要があるためです。 Foo me; のように、テンプレート引数を指定しないと、コンパイル エラーが発生します。
この区別は、単一のデフォルト引数を持つ関数に似ています。括弧のない foo は関数を呼び出しませんが、foo() は関数を呼び出すのと同様に、デフォルト値でインスタンス化をトリガーするには、テンプレート引数の構文が存在する必要があります。
以上がC 11 以前のデフォルト引数を持つクラス テンプレートに空の山括弧を使用する必要があるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。