テンプレート パラメーター: "typename" と "class" の違いを理解する
テンプレート プログラミングでは、テンプレート パラメーターを指定すると、汎用のさまざまなデータ型を操作できるコード。よく使用される 2 つのパラメータ タイプは、「typename」と「class」です。機能的には似ていますが、これらのキーワードには特定の意味と用途があります。
基本テンプレート仕様の互換性
単純なテンプレート宣言の場合、「typename」と「class」は両方とも交換可能。たとえば、次のテンプレート クラスは同一です:
template <class T> class Foo {};
template <typename T> class Foo {};
依存型の区別
"typename" は、依存するネストされた型を参照するときに使用されます。他のテンプレートパラメータ。これは、次の例に示すように、別のパラメーターに依存する型エイリアスまたは typedef がテンプレート クラスに含まれているシナリオで発生します。
template <typename param_t> class Foo { typedef typename param_t::baz sub_t; };
テンプレート テンプレートおよび明示的なテンプレートのインスタンス化の「クラス」
テンプレートテンプレートを宣言するときは、「クラス」を使用する必要があります。テンプレート テンプレートを使用すると、テンプレートをネストして、より複雑なパラメータ化構造を作成できます。例:
template <template <typename, typename> class Container, typename Type> class Example { Container<Type, std::allocator<Type>> baz; };
さらに、テンプレートを明示的にインスタンス化するには「クラス」が必須であり、テンプレートの特定のタイプを指定します。
template class Foo<int>;
これらの区別は、微妙だが重要な点を強調しています。 「typename」と「class」テンプレートパラメータの違い。一般に互換性がありますが、依存型、テンプレート テンプレート、明示的なテンプレートのインスタンス化などの特定のコンテキストでは、テンプレートの適切な動作を保証するためにキーワードを正しく使用することが不可欠です。
以上がC テンプレートの `typename` と `class`: 異なる点は何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。