Dalam C , manipulator strim hex menyediakan cara yang mudah untuk mencetak integer dalam format perenambelasan. Artikel ini meneroka cara membuat manipulator strim tersuai yang mengubah suai item seterusnya pada strim.
Secara khusus, kami menyasarkan untuk mencipta manipulator tambah satu yang menambah nilai integer seterusnya yang dicetak sebanyak 1. Untuk mencapai matlamat ini, kita perlu menyimpan beberapa keadaan dalam setiap aliran. Kita boleh menggunakan fungsi iword dan indeks yang diperuntukkan oleh xalloc untuk tujuan ini:
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; }
Dengan keadaan ini, kita boleh mendapatkannya dalam semua strim. Untuk menyambung ke dalam operasi output yang melaksanakan pemformatan angka, kami mentakrifkan aspek tersuai:
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())); } };
Faset ini menambah nilai yang disimpan dalam keadaan strim kepada nombor yang dicetak.
Sekarang, kita boleh menguji manipulator tambah satu:
int main() { // outputs: 11121011 cout.imbue(locale(locale(),new my_num_put)); cout << add_one << 10 << 11 << add_none << 10 << 11; }
Kod ini menunjukkan cara untuk menentukan manipulator strim tersuai yang mengubah suai item seterusnya pada strim. Untuk memastikan hanya item seterusnya ditambah, kami boleh menetapkan semula keadaan strim kepada 0 selepas setiap panggilan do_put.
Atas ialah kandungan terperinci Bagaimana untuk Mencipta Manipulator Strim Tersuai yang Menambahkan Integer Keluaran Seterusnya dalam C?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!