Maison > développement back-end > C++ > Comment les manipulateurs de flux personnalisés peuvent-ils être utilisés pour modifier les futurs éléments d'un flux de sortie en C ?

Comment les manipulateurs de flux personnalisés peuvent-ils être utilisés pour modifier les futurs éléments d'un flux de sortie en C ?

Linda Hamilton
Libérer: 2024-11-07 02:12:03
original
205 Les gens l'ont consulté

How can custom stream manipulators be used to modify future items on an output stream in C  ?

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; }
Copier après la connexion

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&amp; 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&amp; f, char_type fill, unsigned long v) const { 
        return num_put<char>::do_put(s, f, fill, v + f.iword(geti())); 
    } 
}; 
Copier après la connexion

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;
}
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal