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