Heim >Backend-Entwicklung >C++ >Wann ist das C-Schlüsselwort „typename' erforderlich?
In C ist das Schlüsselwort „typename“ erforderlich, wenn auf a verwiesen wird verschachtelter Name, der ein abhängiger Name ist, d. h. in einer Vorlageninstanz mit unbekanntem Parameter verschachtelt.
Ein abhängiger Name ist ein Name, der dies nicht kann zur Kompilierungszeit vollständig aufgelöst werden, da es von einem Vorlagenparameter abhängt. Zum Beispiel im folgenden Code:
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(); }
Der Namensvektor
::iterator ist ein abhängiger Name, da er vom Vorlagenparameter K abhängt. Zur Kompilierungszeit kennt der Compiler den Wert nicht von K, sodass der Namensvektor nicht vollständig aufgelöst werden kann
::iterator.
Das Schlüsselwort „typename“ wird verwendet, um dem Compiler mitzuteilen, dass der Name vector
::iterator ist ein Typname, auch wenn er zur Kompilierungszeit nicht vollständig aufgelöst werden kann. Dies ist notwendig, da der Compiler den Typ der Variablen p kennen muss, um korrekten Code zu generieren.
Es gibt andere Fälle, in denen „Typname“ angegeben werden muss, beispielsweise wenn auf einen verschachtelten Typ verwiesen wird innerhalb einer Vorlagenklasse deklariert. Zum Beispiel im folgenden Code:
template<class T> struct A { typedef typename T::type my_type; };
Der Name typename T::type ist ein verschachtelter Typname, der in der Vorlagenklasse A deklariert wird. Zur Kompilierungszeit kennt der Compiler den Typ von nicht T, daher kann der Name typename T::type nicht vollständig aufgelöst werden.
Das Schlüsselwort „typename“ wird verwendet, um dem Compiler mitzuteilen, dass der Name typename T::type ein Typname ist, auch wenn dies der Fall ist kann zur Kompilierzeit nicht vollständig aufgelöst werden. Dies ist notwendig, da der Compiler den Typ der Variablen my_type kennen muss, um korrekten Code zu generieren.
Das obige ist der detaillierte Inhalt vonWann ist das C-Schlüsselwort „typename' erforderlich?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!