„Wenn ein Arbeiter seine Arbeit gut machen will, muss er zuerst seine Werkzeuge schärfen.“ – Konfuzius, „Die Gespräche des Konfuzius. Lu Linggong“
Titelseite > Programmierung > Wie definiere ich Freundschaftsbeziehungen in Vorlagenklassen mit unterschiedlichen Vorlagenargumenten?

Wie definiere ich Freundschaftsbeziehungen in Vorlagenklassen mit unterschiedlichen Vorlagenargumenten?

Veröffentlicht am 18.11.2024
Durchsuche:398

How to Define Friend Relationships in Template Classes with Different Template Arguments?

Eintauchen in Klassenvorlagen mit Vorlagenklassenfreunden

Beim Definieren einer Binärbaumklasse (BT) und ihrer Elementklasse (BE). erforderlich, um eine Freundschaftsbeziehung aufzubauen, damit BT auf die privaten Mitglieder von BE zugreifen kann. Es ist jedoch wichtig, die zugrunde liegenden Mechanismen zu verstehen, um die Beziehung richtig zu definieren.

Ursprünglich haben Sie versucht, die Friend-Beziehung als template friend class BT zu deklarieren. Diese Syntax führt jedoch zu einem Namenskonflikt mit dem Vorlagenparameter von BE. Vorlagenparameter in verschachtelten Vorlagen müssen unterschiedliche Namen haben.

Stattdessen sollten Sie unterschiedliche Vorlagenparameternamen verwenden, wie zum Beispiel:

template class BE {
  template friend class BT;
};

Diese Deklaration gibt an, dass jede BT-Klasse, unabhängig von ihren Vorlagenargumenten, ein Freund aller BE-Klassen mit passenden Vorlagenargumenten ist.

Betrachten Sie die folgenden Beispiele, um die verschiedenen Typen weiter zu verdeutlichen von Freundschaftsbeziehungen:

template
struct foo {
  template
  friend class bar;
};

In diesem Fall ist bar ein Freund von foo, unabhängig von den Vorlagenargumenten von bar. Jede Spezialisierung von bar wäre ein Freund jeder Spezialisierung von foo.

template
struct foo {
  friend class bar;
};

Hier ist bar nur ein Freund von foo, wenn sein Vorlagenargument mit dem von foo übereinstimmt. Also wäre nur bar ein Freund von foo.

In Ihrem spezifischen Szenario wäre die Freundklasse bar; sollte ausreichen, da es jeder Spezialisierung von bar erlaubt, auf die privaten Mitglieder von BE zuzugreifen, solange sein Vorlagenargument mit der entsprechenden BE-Klasse übereinstimmt.

Neuestes Tutorial Mehr>

Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.

Copyright© 2022 湘ICP备2022001581号-3