Heim >Backend-Entwicklung >C++ >Wie können benutzerdefinierte Stream-Manipulatoren verwendet werden, um zukünftige Elemente in einem Ausgabestream in C zu ändern?
Ä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& 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())); } };
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!