Heim >Backend-Entwicklung >C++ >Wie kann ich das überladen?

Wie kann ich das überladen?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-12-14 02:01:10256Durchsuche

How Can I Overload the

Überschreibender Operator<< für Enhanced Stream Manipulation

Diese Diskussion dreht sich um die Herausforderung der Überlastung von Operator<< und Einbindung der Funktionalität von std::endl.

Das Problem:

Beim Überladen von Operator<<, während iostreams wie my_stream problemlos primitive Typen und Zeichenfolgen ausgeben können über my_stream << 10 << „heads“, versucht, std::endl mit my_stream << auszugeben endl; führt zu einem Kompilierungsfehler.

Die Lösung: Funktionszeiger verstehen

Der Schlüssel zur Lösung dieses Problems liegt in der Erkenntnis, dass std::endl eine Funktion ist. Der std::cout-Stream verwendet den Operator<< um einen Funktionszeiger mit derselben Signatur wie std::endl zu akzeptieren. Diese Funktion wird anschließend aufgerufen und ihr Rückgabewert wird weitergeleitet.

Endline-Manipulation für MyStream anpassen

Um eine ähnliche Funktionalität für my_stream zu erreichen, kann eine spezielle Endl-Funktion definiert werden mit der folgenden Signatur:

typedef MyStream&amp; endl(MyStream&amp; stream)

Innerhalb dieser Funktion können Sie alle zusätzlichen Aktionen oder Änderungen durchführen, die für Ihre spezifische Stream-Implementierung erforderlich sind, um dies sicherzustellen es verhält sich wie beabsichtigt, wenn std::endl verwendet wird.

Überladender Operator<< um std::endl zu akzeptieren

Damit my_stream auch std::endl akzeptieren kann, deklarieren Sie einen anderen Operator<< mit der folgenden Signatur:

typedef std::basic_ostream > CoutType;
typedef CoutType& (*StandardEndLine)(CoutType&);

MyStream& operator<<(StandardEndLine manip)

Dieser Operator ruft std::endl im Standardausgabestream auf, ahmt das Verhalten von std::cout nach und ist gleichzeitig mit der benutzerdefinierten endl-Implementierung von my_stream kompatibel.

Das obige ist der detaillierte Inhalt vonWie kann ich das überladen?. 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