Heim  >  Artikel  >  Backend-Entwicklung  >  Wie überlade ich den spitzen Klammeroperator für eine Vorlagenklasse richtig?

Wie überlade ich den spitzen Klammeroperator für eine Vorlagenklasse richtig?

Linda Hamilton
Linda HamiltonOriginal
2024-11-01 15:29:02460Durchsuche

How to Properly Overload the Angle Bracket Operator for a Template Class?

Ü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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn