Écrire vos propres manipulateurs sans arguments
Les manipulateurs d'écriture qui n'utilisent pas d'arguments ne requiert ni de la dérivation de classe ni de l'utilisation des macros complexes.Supposez que votre imprimante requiert des paires <ESC> [pour passer en mode gras.vous pouvez insérer cette paire directement dans le flux de données :
cout << "regular " << '\033' << '[' << "boldface" << endl;
Ou vous pouvez définir le manipulateur d' bold , qui insère les caractères :
ostream& bold( ostream& os ) {
return os << '\033' << '[';
}
cout << "regular " << bold << "boldface" << endl;
La fonction globale définie d' bold prend un argument de référence d' ostream et retourne la référence d' ostream .Ce n'est pas une fonction membre ou une fonction friend car il n'a pas besoin d'accéder à un élément privé de la classe.La fonction d' bold se connecte au flux car l'opérateur d' << du flux de données est surchargé pour accepter que type de fonction, à l'aide d'une déclaration qui ressemble à ceci :
_Myt& operator<<(ios_base& (__cdecl *_Pfn)(ios_base&))
{
// call ios_base manipulator
(*_Pfn)(*(ios_base *)this);
return (*this);
}
Vous pouvez utiliser cette fonction pour étendre d'autres opérateurs surchargés.Dans ce cas, il est involontaire qu' bold insère des caractères dans le flux de données.La fonction est appelée lors de l'insertion dans le flux de données, pas nécessairement lorsque les caractères adjacents sont imprimés.Par conséquent, l'impression pourrait être différée à cause de la mise en mémoire tampon du flux de données.