なぜ「typename」キーワードが必要ですか?
プログラミングでは、ネストされた名前を使用するのが一般的です。ここで、1 つのエンティティの名前 (例: クラス) が別のエンティティ (例: メンバー関数) の名前に含まれています。通常、このネストはどのエンティティが参照されているかを区別するのに十分ですが、コンパイラが明示的な指定を必要とする場合もあります。
「typename」キーワードの説明
「typename」 " キーワードは、ネストされた名前が型を参照することを明示的に宣言するために使用されます。これは、コンパイラがコンテキストからネストされた名前の型を推測できない場合に必要です。このようなネストされた名前は、「依存名」として知られています。
ネストされた名前は、不明なパラメーターを持つテンプレート インスタンス内で使用されると依存します。この状況では、テンプレート パラメーターが判明するまで、コンパイラにはネストされた名前の特定の型を判断するための十分な情報がありません。
例
次のコードを考えてみましょう。 :
template<class K> class C { struct P {}; vector<P> vec; void f(); }; template<class K> void C<K>::f() { typename vector<P>::iterator p = vec.begin(); }
この例では、「iterator」のネストされた名前がテンプレートに依存しているため、「typename」キーワードが必要ですパラメータ「K」 "typename" キーワードがないと、コンパイラは "iterator" が型 "vector
::iterator" を参照していることを認識できません。
"typename" が必要なその他のケース
上記の例以外にも「typename」が必要な場合include:
以上がC テンプレートで「typename」キーワードが必要になるのはどのような場合ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。