Heim > Artikel > Backend-Entwicklung > Wie überlade ich den spitzen Klammeroperator für eine Vorlagenklasse richtig?
Überladung des spitzen Klammeroperators für eine Vorlagenklasse
Es wird versucht, den Operator << zu überladen. Wenn Sie den Operator als Freund für ein Vorlagenklassenpaar verwenden, wird möglicherweise eine Compilerwarnung angezeigt, die auf eine Funktionsdeklaration hinweist, die keine Vorlage ist. Dieses Problem entsteht aufgrund einer Diskrepanz zwischen der Friend-Deklaration und der tatsächlichen Funktionsdefinition.
Um dieses Problem zu beheben, muss angegeben werden, dass die Friend-Deklaration für eine spezielle Instanz der Vorlagenklasse Pair mit bestimmten Vorlagenargumenten gilt. Dies wird durch die Verwendung leerer spitzer Klammern <> erreicht. nach der Operator-Deklaration in der Friend-Deklaration.
Der korrigierte Code sieht so aus:
<code class="cpp">template <class T, class U> class Pair { public: Pair(T v1, U v2) : val1(v1), val2(v2) {} ~Pair() {} Pair& operator=(const Pair&); friend ostream& operator<<<> (ostream&, Pair<T, U>&); private: T val1; U val2; };</code>
Zusätzlich muss die Funktionsdefinition für den überladenen Operator vor der Template-Klassendefinition deklariert werden, as folgt:
<code class="cpp">template <class T, class U> ostream& operator<<<> (ostream& out, Pair<T, U>& v); template <class T, class U> class Pair { // ... };</code>
Durch diese Änderungen kann der Compiler die Friend-Funktion korrekt als Spezialisierung für die Pair-Vorlage identifizieren und die Warnung bezüglich einer Nicht-Vorlagen-Funktionsdeklaration vermeiden.
Das obige ist der detaillierte Inhalt vonWie überlade ich den spitzen Klammeroperator für eine Vorlagenklasse richtig?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!