Ü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& endl(MyStream& 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!