Beim Programmieren kann es vorkommen, dass Sie einen bestimmten Operator überladen möchten, um mit Ihren benutzerdefinierten Datentypen oder Klassen zu interagieren. Diese Frage untersucht ein Problem, das auftritt, wenn versucht wird, den << Operator als Friend-Funktion für eine Template-Klasse.
Das bereitgestellte Code-Snippet deklariert ein Template-Klassenpaar mit zwei Typparametern T und U. Innerhalb dieser Klasse wird versucht, das << Operator als Friend-Funktion, die eine ostream- und eine Pair-Instanz als Parameter akzeptiert. Der Compiler gibt jedoch trotz der anschließenden Definition einer Vorlagenfunktion für den Operator eine Warnung aus, wenn eine Nicht-Vorlagenfunktion deklariert wird.
Um dieses Problem zu beheben, besteht die richtige Syntax darin, die Vorlageninstanz für < zu spezialisieren ;< Operator, anstatt ihn als allgemeine Friend-Funktion zu deklarieren. Dies wird erreicht, indem die Deklaration wie folgt geändert wird:
friend ostream& operator<<<> (ostream&, Pair&);
Diese Deklaration gibt an, dass eine spezialisierte Vorlageninstanz des << Der Operator wird für die Pair-Klasse mit den Typparametern T und U definiert. Es wird ausdrücklich darauf hingewiesen, dass es sich um eine Spezialisierung und nicht um eine allgemeine Deklaration handelt.
Darüber hinaus empfiehlt die Compiler-Empfehlung, <...> nach dem Funktionsnamen in der Friend-Deklaration ist in diesem Fall unnötig, da der Compiler die Typparameter aus den Vorlagenargumenten in der Definition ableiten kann.
Durch diese Anpassungen wird der Code erfolgreich kompiliert. Denken Sie daran, dass Sie zum Überladen von Operatoren in Vorlagen die zu spezialisierende Vorlageninstanz explizit angeben müssen, wie in der geänderten Deklaration gezeigt.
Das obige ist der detaillierte Inhalt vonWie überladen Sie die `. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!