Wie man benutzerdefinierte Manipulatoren zum Streamen von selbst geschriebenen Klassen schreibt

8

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?

    
Peter G. 28.04.2011, 09:37
quelle

1 Antwort

2

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:

  1. Sie verwenden den Manipulator, der eine neue Instanz des Helpers zurückgibt, die an eine Implementierung des Helpers
  2. gebunden ist
  3. stream versucht, den Helfer zu verarbeiten, der die << Überladung auf dem Helfer
  4. aufruft
  5. , die den Operator () auf dem Helfer
  6. aufruft
  7. ruft die echte Implementierung des Helpers mit dem Parameter auf, der vom ursprünglichen Manipulatoraufruf
  8. übergeben wurde

Wenn du willst, kann ich auch 2 Param und 3 Param Helfer eintragen. Das Prinzip ist jedoch dasselbe.

    
Let_Me_Be 28.04.2011 09:52
quelle

Tags und Links