Warum ist das Schlüsselwort „typename“ notwendig?
In der Programmierung werden häufig verschachtelte Namen verwendet, bei denen der Name einer Entität ( (z. B. eine Klasse) ist im Namen einer anderen Entität (z. B. einer Mitgliedsfunktion) enthalten. Während diese Verschachtelung normalerweise ausreicht, um zu unterscheiden, auf welche Entität verwiesen wird, gibt es Fälle, in denen der Compiler eine explizite Angabe erfordert.
Erklärung des Schlüsselworts „typename“
Das „typename Das Schlüsselwort „ wird verwendet, um explizit zu deklarieren, dass sich ein verschachtelter Name auf einen Typ bezieht. Dies ist erforderlich, wenn der Compiler den Typ eines verschachtelten Namens nicht aus dem Kontext ableiten kann. Ein solcher verschachtelter Name wird als „abhängiger Name“ bezeichnet.
Ein verschachtelter Name wird abhängig, wenn er innerhalb einer Vorlageninstanz mit einem unbekannten Parameter verwendet wird. In dieser Situation verfügt der Compiler nicht über genügend Informationen, um den spezifischen Typ des verschachtelten Namens zu bestimmen, bis die Vorlagenparameter bekannt sind.
Beispiel
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(); }
In diesem Beispiel ist das Schlüsselwort „typename“ erforderlich, da der verschachtelte Name „iterator“ vom Vorlagenparameter „K“ abhängt. Ohne das Schlüsselwort „typename“ wüsste der Compiler nicht, dass „iterator“ sich auf den Typ „vector
::iterator“ bezieht.
Andere Fälle, in denen „typename“ erforderlich ist
Zusätzlich zum obigen Beispiel gibt es weitere Fälle, in denen „Typname“ erforderlich ist:
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!