Heim >Backend-Entwicklung >C++ >Wie können benutzerdefinierte Stream-Manipulatoren verwendet werden, um zukünftige Elemente in einem Ausgabestream in C zu ändern?

Wie können benutzerdefinierte Stream-Manipulatoren verwendet werden, um zukünftige Elemente in einem Ausgabestream in C zu ändern?

Linda Hamilton
Linda HamiltonOriginal
2024-11-07 02:12:03218Durchsuche

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

Änderung benutzerdefinierter Stream-Manipulatoren in C

Das Ändern zukünftiger Elemente in einem Stream mit benutzerdefinierten Manipulatoren ist eine vielseitige Technik in C. Während Manipulatoren wie „hex“ das Ausgabeformat ändern, bieten Manipulatoren, die Werte anpassen, wie „plusone“, noch mehr Flexibilität.

Um den Status in jedem Stream zu speichern, werden die iword-Funktion und der xalloc-Index verwendet.

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; }

Mithilfe von Facetten kann die numerische Ausgabe individuell angepasst werden. Die my_num_put-Struktur überschreibt die do_put-Methode, um Werte basierend auf dem gespeicherten Zustand zu erhöhen.

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())); 
    } 
}; 

Durch Anwenden dieses Manipulators wird die numerische Ausgabe geändert:

int main() {
    // outputs: 11121011
    cout.imbue(locale(locale(),new my_num_put));
    cout << add_one << 10 << 11 
         << add_none << 10 << 11;
}

Bei der Änderung einzelner Elemente wird zurückgesetzt Es wird empfohlen, das Wort nach jedem do_put-Aufruf auf 0 zu setzen.

Das obige ist der detaillierte Inhalt vonWie können benutzerdefinierte Stream-Manipulatoren verwendet werden, um zukünftige Elemente in einem Ausgabestream in C zu ändern?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn