Modification des manipulateurs de flux personnalisés en C
Modifier les futurs éléments d'un flux avec des manipulateurs personnalisés est une technique polyvalente en C. Alors que les manipulateurs comme « hex » modifient le format de sortie, les manipulateurs qui ajustent les valeurs, comme « plusone », offrent une flexibilité encore plus grande.
Pour stocker l'état dans chaque flux, la fonction iword et l'index xalloc sont utilisés.
inline int geti() { static int i = ios_base::xalloc(); return i; } ostream& add_one(ostream& os) { os.iword(geti()) = 1; return os; } ostream& add_none(ostream& os) { os.iword(geti()) = 0; return os; }
Grâce aux facettes, la sortie numérique peut être personnalisée. La structure my_num_put remplace la méthode do_put pour incrémenter les valeurs en fonction de l'état stocké.
struct my_num_put : num_put<char> { iter_type do_put(iter_type s, ios_base& f, char_type fill, long v) const { return num_put<char>::do_put(s, f, fill, v + f.iword(geti())); } iter_type do_put(iter_type s, ios_base& f, char_type fill, unsigned long v) const { return num_put<char>::do_put(s, f, fill, v + f.iword(geti())); } };
En appliquant ce manipulateur, la sortie numérique est modifiée :
int main() { // outputs: 11121011 cout.imbue(locale(locale(),new my_num_put)); cout << add_one << 10 << 11 << add_none << 10 << 11; }
Pour la modification d'un seul élément, la réinitialisation le mot à 0 après chaque appel do_put est recommandé.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!