Schreiben eigener Manipulatoren ohne Argumente

Schreiben manipulatoren, die keine Argumente verwenden, erfordert weder ableitung Klassen dennoch Verwendung von komplexen Makros.Angenommen, die der Drucker Paars <ESC> eingeben. Modus erfordert [FettSie können dieses Paar direkt in den Datenstrom eingefügt werden:

cout << "regular " << '\033' << '[' << "boldface" << endl;

Sie können auch den bold Manipulator definieren, der die Zeichen eingefügt werden:

ostream& bold( ostream& os ) {
    return os << '\033' << '[';
}
cout << "regular " << bold << "boldface" << endl;

Die global definierte bold-Funktion akzeptiert ein ostream-Argument Verweise und gibt den ostream Verweis zurück.Es ist keine Memberfunktion oder Friend, da es keinen Zugriff auf beliebige Klassen private Elemente erfordert.Die bold-Funktion stellt eine Verbindung mit dem Stream, da der << des Streams Operator überladen wird, um den Typ der Funktion, wobei eine Deklaration zu akzeptieren, die etwa folgendermaßen aussieht:

_Myt& operator<<(ios_base& (__cdecl *_Pfn)(ios_base&))
{   
   // call ios_base manipulator
   (*_Pfn)(*(ios_base *)this);
   return (*this);
}

Sie können diese Funktion verwenden, um andere überladene Operatoren zu erweitern.In diesem Fall ist es beiläufig, dass bold Zeichen in den Datenstrom eingefügt werden.Die Funktion ist, wenn sie sich in den Datenstrom eingefügt wird, nicht unbedingt aufgerufen, wenn die angrenzenden Zeichen gedruckt werden.Daher kann das Drucken Puffern aufgrund des Streams verzögert werden.

Siehe auch

Referenz

Ausgabestreams