Verwendung des Klassennamens in einer Klassenvorlage ohne Vorlagenparameter

8

Der Code stammt aus einem C ++ - Buch wie folgt:

Warum hat dieses öffentliche Mitglied Link * next kein typename-Argument?

%Vor%

Ich denke, es sollte Link<E>* next sein.

Bitte sagen Sie mir, warum es kein Vorlagenargument hat.

    
Makoto 17.06.2015, 12:09
quelle

1 Antwort

13

Dies wird als "Name der injizierten Klasse" bezeichnet. Die Regel kommt speziell von [temp.local]:

  

Wie normale (Nicht-Template-) Klassen haben Klassenvorlagen einen Namen injected-class (Abschnitt 9). Die injected-Klasse-   name kann als Vorlagenname oder Typname verwendet werden. Wenn es mit einer template-argument-list verwendet wird,   als Template-Argument für einen Template Template-Parameter oder als endgültiger Bezeichner im elaborated-type-specifier   von einer Freundesklassen-Template-Deklaration bezieht sie sich auf die Klassenvorlage selbst. Ansonsten ist gleichwertig   zu Schablonenname gefolgt von den Template-Parametern der Klassenvorlage, eingeschlossen in <> .

     

Im Rahmen einer Klassenvorlagenspezialisierung oder Teilspezialisierung, wenn der Name der eingefügten Klasse lautet   Wird er als typname verwendet, entspricht er dem Vorlagennamen , gefolgt von den Vorlagenargumenten der Klasse   Template-Spezialisierung oder Teilspezialisierung, eingeschlossen in & lt; & gt ;. [Beispiel:

%Vor%      

-endebeispiel]

Dies ist im Grunde der Einfachheit halber, so dass der Klassenname innerhalb der Klasse sich auf die Klasse selbst bezieht und nicht auf etwas Äußeres, das denselben Namen haben kann. Bei Klassenvorlagen wird möglicherweise viel Tipparbeit eingespart, wenn Sie eine lange Vorlagenargumentliste haben.

    
Barry 17.06.2015, 12:12
quelle

Tags und Links