Pengubahsuaian Manipulator Strim Tersuai dalam C
Mengubah suai item masa hadapan pada strim dengan manipulator tersuai ialah teknik serba boleh dalam C . Walaupun manipulator seperti "hex" mengubah format output, manipulator yang melaraskan nilai, seperti "plusone," memberikan fleksibiliti yang lebih besar.
Untuk menyimpan keadaan dalam setiap strim, fungsi iword dan indeks xalloc digunakan.
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; }
Menggunakan aspek, output berangka boleh disesuaikan. Struktur my_num_put mengatasi kaedah do_put untuk menambah nilai berdasarkan keadaan yang disimpan.
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())); } };
Menggunakan manipulator ini, output berangka diubah suai:
int main() { // outputs: 11121011 cout.imbue(locale(locale(),new my_num_put)); cout << add_one << 10 << 11 << add_none << 10 << 11; }
Untuk pengubahsuaian item tunggal, tetapkan semula perkataan kepada 0 selepas setiap panggilan do_put disyorkan.
Atas ialah kandungan terperinci Bagaimanakah manipulator aliran tersuai boleh digunakan untuk mengubah suai item masa hadapan pada aliran keluaran dalam C?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!