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
256 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!

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