Heim >Backend-Entwicklung >C++ >Warum benötige ich einen separaten Parameter für eine Friend-Vorlagenklasse innerhalb einer Klassenvorlage?
Klassenvorlage mit Vorlagenklassenfreund: Eintauchen in die Mechanik
Stellen Sie sich vor, Sie konstruieren eine Binärbaumklasse (BT) mit einer Elementklasse (BE). ) beschreibt jeden Knoten und ähnelt der folgenden Struktur:
template<class T> class BE { T *data; BE *l, *r; public: template<class U> friend class BT; }; template<class T> class BT { BE<T> *root; public: ... private: ... };
Dieses Setup stößt auf eine merkwürdige Eigenart. Es wird versucht, den Freund als template
Diese Unterscheidung ergibt sich aus dem Konzept des Template-Shadowing. Vorlagenparameter können sich im Rahmen verschachtelter Vorlagen nicht gegenseitig duplizieren. Folglich sind unterschiedliche Parameternamen für verschachtelte Vorlagen unerlässlich.
Beachten Sie die folgenden Konstrukte:
template<typename T> struct foo { template<typename U> friend class bar; };
Hier wird bar unabhängig von seinen eigenen Vorlagenargumenten als Freund von foo deklariert. Alle Variationen von bar, ob bar
Im Gegensatz dazu die folgende Deklaration:
template<typename T> struct foo { friend class bar<T>; };
Impliziert, dass bar nur ein Freund von foo ist, wenn das Vorlagenargument von bar mit dem von foo übereinstimmt. Nur bar
Daher kann in Ihrem speziellen Szenario die Form „friend class bar
Das obige ist der detaillierte Inhalt vonWarum benötige ich einen separaten Parameter für eine Friend-Vorlagenklasse innerhalb einer Klassenvorlage?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!