Wie schreibe ich benutzerdefinierte Stream-Manipulatoren in C ++, die das Streaming-Format einer selbstgeschriebenen Klasse steuern?
Genauer gesagt, wie würde ich die einfachen Manipulatoren verbose
und terse
schreiben, um die Menge der gestreamten Ausgabe zu steuern?
Meine Umgebung ist GCC, Version 4.5.1 und höher.
Beispiel:
%Vor%PS: Was folgt, ist nur eine Nebenfrage. Fühlen Sie sich frei, sie zu ignorieren: Kann dies portabel auf Manipulatoren erweitert werden, die Argumente nehmen? Josuttis schreibt in "Die C ++ - Standardbibliothek" gegen Ende von Abschnitt 13.6.1, dass das Schreiben von Manipulatoren, die Argumente entgegennehmen, implementierungsabhängig ist. Ist das immer noch wahr?
Ich sehe keinen Grund dafür, dass sie implementierungsabhängig sind.
Dies ist ein Kometen, das ich für den eigentlichen Manipulator verwende, um eine Funktion zu erzeugen, die eine Instanz des folgenden Helpers zurückgibt. Wenn Sie die Daten speichern müssen, speichern Sie sie einfach im Helper, einige globale Variable, Singleton, etc ...
%Vor%Beispiel eines Manipulators basierend auf diesem:
%Vor%Für eine Erklärung:
<<
Überladung auf dem Helfer ()
auf dem Helfer Wenn du willst, kann ich auch 2 Param und 3 Param Helfer eintragen. Das Prinzip ist jedoch dasselbe.