Wann ist das Schlüsselwort „typename“ erforderlich? [Duplikat]
Bedenken Sie den 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(); }
Warum ist das Schlüsselwort „typename“ in diesem Beispiel notwendig?
Antwort:
Das Schlüsselwort „typename“ ist immer dann erforderlich, wenn Sie auf einen verschachtelten Namen innerhalb einer Vorlagenklasse oder -funktion verweisen, in der der Der Typ des verschachtelten Namens ist zur Kompilierungszeit nicht bekannt. Dies wird als „abhängiger Name“ bezeichnet.
In C gibt es drei Kategorien von Entitäten: Werte, Typen und Vorlagen. Jeder von ihnen kann Namen haben, aber der Name selbst gibt nicht an, zu welcher Kategorie die Entität gehört. Daher muss der Compiler die Entitätskategorie aus dem Kontext ableiten.
Wenn der Compiler die Kategorie nicht ableiten kann, müssen Sie sie explizit mit dem entsprechenden Schlüsselwort angeben:
Im bereitgestellten Code ist der verschachtelte Name „vector< ;P>" ist ein Typ innerhalb einer Vorlagenklasse. Der Compiler kann dies jedoch nicht ableiten, da der Typparameter „K“ zur Kompilierungszeit unbekannt ist. Daher ist das Schlüsselwort „typename“ erforderlich, um explizit anzugeben, dass „vector
“ ist ein Typ.
Andere Fälle, in denen „Typname“ angegeben werden muss, sind:
Das obige ist der detaillierte Inhalt vonWann ist das Schlüsselwort „typename' in C-Vorlagen erforderlich?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!