ホームページ >バックエンド開発 >C++ >C `typename` キーワードが必要になるのはどのような場合ですか?

C `typename` キーワードが必要になるのはどのような場合ですか?

Susan Sarandon
Susan Sarandonオリジナル
2024-12-21 18:07:11726ブラウズ

When is the C   `typename` Keyword Necessary?

"typename" キーワードはどのような場合に必要ですか?

gt;

C では、キーワードを参照するときに "typename" キーワードが必要です。ネストされた名前は依存名です。つまり、不明なパラメーターを持つテンプレート インスタンス内にネストされています。

A依存名は、テンプレート パラメーターに依存するため、コンパイル時に完全に解決できない名前です。たとえば、次のコードでは:

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();
}</p>
<p>vector</p>
<p>::iterator という名前は、テンプレート パラメーター K に依存するため、依存名です。コンパイル時には、コンパイラーは値を認識しません。 K の名前であるため、名前ベクトル<P>::iterator を完全に解決できません。</p>
<p>T "typename" キーワードは、コンパイラに次のことを指示するために使用されます。名前 Vector<P>::iterator は、コンパイル時に完全に解決できない場合でも、型名です。コンパイラは正しいコードを生成するために変数 p の型を知る必要があるため、これが必要です。</p>
<p>ネストされた型を参照する場合など、「typename」を指定する必要がある場合もあります。テンプレートクラス内で宣言されます。たとえば、次のコードでは:</p>
<pre class="brush:php;toolbar:false">template<class T>
struct A {
    typedef typename T::type my_type;
};

typename T::type という名前は、テンプレート クラス A 内で宣言されたネストされた型名です。コンパイル時には、コンパイラーは型を認識しません。 T であるため、名前 typename T::type を完全には解決できません。

「typename」キーワードは、名前 typename T::type が型名であることをコンパイラに伝えるために使用されます。たとえコンパイル時に完全に解決できなかったとしても。これが必要なのは、コンパイラが正しいコードを生成するために変数 my_type の型を知る必要があるためです。

以上がC `typename` キーワードが必要になるのはどのような場合ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。