これは、template
引数のclass
の使用に起因する通常の混乱です。
そのclass
はクラスとは関係ありません。それは、テンプレートだけでなくタイプクラステンプレート引数(テンプレート引数)を受け入れることを意味し、任意のタイプであり、クラスではありません。
なぜ、彼らはclass
を選んだのですか?彼らはC++プログラムでは必ず使用されていなかったキーワードを使用しなければならなかったので、それはC++の予約済みキーワードであるため、class
はokでした。
class
の代わりにtypename
というキーワードがあります。彼らは完全に同等ですしかし、私の意見ではtypename
という名前は、「次のものは型引数です」と言うだけで、クラスでなければならないと思うので、はっきりしています。
なぜ両方の構文が許可されるのですか? typename
キーワードは、の後にという言語で導入されていたため(テンプレート内でいくつかの宣言を明確にするために別のキーワードを追加する必要があることに気付いたとき)。引数の宣言の場合には "改装されました"。 class
キーワードのこの使用法は、その間に書かれたプログラム/文書との互換性のために保持されていました。ここ
- 私は明らかに、私は一般的な(C++ 11、14.1¶4)における非型テンプレートパラメータを意味し、簡単にするために "不可欠" と言います。
-
テンプレートパラメータにclassとtypenameの意味に違いはありません。
(C++ 11、§14。1¶2)
標準がそうだから –
@VJovic:ナンセンス。標準では、 "テンプレートパラメータはクラス型として宣言する必要がありますが、" class' ***キーワードで宣言する必要があります***。また、「標準がそう言っているので」という言葉は、標準化の間になされた選択の背後にある論理的根拠を理解するために全く役に立たない。 –