1. ホーム
  2. c++

[解決済み] テンプレートクラスとクラステンプレートの違いは何ですか?

2023-01-31 06:35:27

質問

テンプレートクラスとクラステンプレートの違いは何ですか?

どのように解決するのですか?

これは多くの人が混乱する共通のポイントです (Wikipedia の Generic Programming のページ、いくつかの C++ チュートリアル、このページの他の回答も含みます)。 C++ に関する限り テンプレートクラスは存在せず、あるのはテンプレートクラスだけです。 このフレーズの読み方は、"関数テンプレート("a template for a function.")に対して、"クラスのテンプレート("a template for a class).です。 繰り返しになりますが、クラスがテンプレートを定義するのではなく、テンプレートがクラスを定義するのです。 (そして関数)を定義します。 例えば、これは テンプレート であり、具体的には クラステンプレート が、しかし であり ではない クラス :

template<typename T> class MyClassTemplate
{ 
    ...
};

宣言は MyClassTemplate<int> はクラスです。 または衒学的に言えば、テンプレートに基づくクラスです。 テンプレートに基づくクラスと、テンプレートに基づかないクラスとでは、特別な性質はありません。 特別な特性とは テンプレート自体の .

C++に関する限り、単語 "テンプレート" は名詞 "クラス" に適用された場合、形容詞としての意味を持たないため、フレーズ "テンプレートクラス" は何の意味も持ちません。 それは クラス それは (を定義している(または テンプレート という、C++には存在しない概念です。

実際の言語では、この単語が "テンプレートクラス" という順序で現れるという事実に基づいているのでしょうから、よくある混乱は理解できますが、これはまったく別の話です。