Manipulatoren: Was steckt hinter den Manipulatoren? (1/3)

Für die reine Anwendung der Standardmanipulatoren kann der folgende Abschnitt zunächst einmal übersprungen werden. Dennoch ist er von großer Bedeutung, weil hier ein weiteres Beispiel für die Mächtigkeit der Möglichkeit zum Überladen von Funktionen gegeben wird.
Hinter den Manipulatoren stecken im Endeffekt nichts anderes als Funktionen, die, sofern sie einem I/O-Operator als Parameter übergeben werden, aufgerufen werden.

Beispiel:

Der Ausgabe-Operator der Klasse ostream ist etwa wie folgt überladen:

  class ostream : virtual public ios {
      ...
      ostream& operator << (ostream& (*func)(ostream&)) {
          return (*func)(*this);
      }
      ...
  }

Wird also dem Operator << als zweiter Operand eine Funktion übergeben, die als Parameter ein ostream-Objekt erhält und ein ostream-Objekt zurückliefert, wird diese Funktion mit dem ostream-Objekt, für das der Operator << aufgerufen wurde, aufgerufen.