Heim > Backend-Entwicklung > C++ > Wann ist das Schlüsselwort „typename' in C-Vorlagen erforderlich?

Wann ist das Schlüsselwort „typename' in C-Vorlagen erforderlich?

Barbara Streisand
Freigeben: 2024-12-21 01:03:10
Original
584 Leute haben es durchsucht

When is the

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();
}
Nach dem Login kopieren

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:

  • " typename": gibt einen Typ innerhalb einer Vorlage an
  • "template": gibt eine Vorlage innerhalb einer an template
  • "value": gibt einen Wert innerhalb einer Vorlage an (im Beispiel nicht explizit gezeigt)

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:

  • Beim Deklarieren eines Vorlagenalias innerhalb einer Klasse
  • Beim Definieren eines Konstruktors oder Destruktors für einen verschachtelten Typ
  • Beim Zugriff auf eine Mitgliedsfunktion eines verschachtelten Typs
  • Bei Verwendung von a Typ als Vorlagenargument

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!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage