Betrachten Sie das Szenario der Definition einer Klassenvorlage für einen Binärbaum (BT) und ein Element innerhalb des Baums (BE). Warum ist es notwendig, beim Deklarieren der Freundschaft zwischen diesen Klassen einen anderen Vorlagenparameter für die Freundklasse als für die enthaltende Klasse zu verwenden?
In C können sich Vorlagenparameter nicht gegenseitig überschatten. Im Kontext verschachtelter Vorlagen müssen die Vorlagenparameter der inneren Vorlage andere Namen haben als die Vorlagenparameter der äußeren Vorlage.
Zum Beispiel im folgenden Code:
template<class T> class BE { T *data; BE *l, *r; public: template<class U> friend class BT; };
Zur Unterscheidung vom T-Template-Parameter der BE-Klasse dient der Template-Parameter U der Friend-Klasse BT. Dies gibt an, dass BT ein Freund von BE ist, unabhängig von den Vorlagenargumenten von BT.
Wenn Sie die Friend-Klasse jedoch wie folgt deklarieren:
template<class T> friend class BT;
Dies impliziert, dass jede bestimmte Instanziierung von BT dies ist ein Freund einer bestimmten Instanziierung von BE. Um eine spezifischere Freundschaft anzugeben, können Sie die folgende Syntax verwenden:
template<typename T> struct foo { friend class bar<T>; };
Dies zeigt an, dass bar nur dann ein Freund von foo ist, wenn das Vorlagenargument von bar mit dem Vorlagenargument von foo übereinstimmt. In Ihrem Fall verwenden Sie die Freundesklasse bar
Das obige ist der detaillierte Inhalt vonWarum unterschiedliche Vorlagenparameter für Friend-Klassen in verschachtelten Vorlagen verwenden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!