Heim >Backend-Entwicklung >C++ >So überladen Sie die

So überladen Sie die

Linda Hamilton
Linda HamiltonOriginal
2024-12-08 05:54:10166Durchsuche

How to Overload the

Überlastung des Operators<< Behandeln von std::endl

Beim Überladen des Stream-Einfügungsoperators (Operator<<) tritt ein häufiges Problem auf, wenn versucht wird, std::endl als Einfügungsargument einzuschließen. Der Fehler „Fehler C2678: binär '<<' „: kein Operator gefunden“ weist darauf hin, dass das System keinen kompatiblen Operator für den linken Operanden UIStream finden kann.

Der zugrunde liegende Grund für diesen Fehler ist, dass std::endl kein Typ, sondern eine Funktion ist. Um dies zu überwinden, müssen wir verstehen, wie std::cout mit std::endl umgeht. std::cout implementiert den Operator<< um einen Funktionszeiger mit derselben Signatur wie std::endl zu verwenden. Anschließend ruft es die Funktion auf und gibt den Rückgabewert weiter.

Um dieses Verhalten zu emulieren, definieren wir einen zusätzlichen Operator<< Funktion in unserer MyStream-Klasse, die eine Funktion mit der benutzerdefinierten MyStreamManipulator-Signatur annimmt. Diese Funktion ruft die angegebene Funktion auf und gibt ihren Rückgabewert zurück.

Um std::endl speziell zu verarbeiten, definieren wir eine statische MyStream::endl-Funktion, die der MyStreamManipulator-Signatur entspricht. Innerhalb dieser Funktion drucken wir eine neue Zeile und führen alle zusätzlichen Stream-Operationen aus, wie z. B. das Leeren des Puffers.

Außerdem definieren wir einen Operator<< Funktion, um die von std::cout verwendete StandardEndLine-Funktionssignatur zu akzeptieren. Diese Funktion ruft die Manip-Funktion mit std::cout als Argument auf und ermöglicht so das Einfügen von std::endl.

Indem wir diese Schritte befolgen, können wir den Operator<< in unserer benutzerdefinierten MyStream-Klasse, um sowohl benutzerdefinierte Daten als auch das Einfügen von std::endl zu verarbeiten. Dadurch können wir MyStream als vielseitige Alternative zu std::cout mit vollständiger Kontrolle über die Stream-Manipulation verwenden.

Das obige ist der detaillierte Inhalt vonSo überladen Sie die. 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