Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah Anda Boleh Mencipta Manipulator Strim C Tersuai untuk Mengubah Suai Item Strim Seterusnya?
Manipulator Strim C Tersuai untuk Mengubah Item Strim Seterusnya
Dalam C , manipulator heks boleh digunakan untuk menukar nombor kepada perwakilan heksadesimalnya . Walau bagaimanapun, bagaimana jika anda perlu mengubah suai bukan sahaja item semasa tetapi juga item berikutnya pada strim?
Mencipta Manipulator tambah satu
Untuk mencipta manipulator yang menambah nilai berangka seterusnya pada strim, ikut langkah berikut:
1. Keadaan Simpan pada Setiap Strim:
Gunakan iword dan geti() untuk menyimpan keadaan pada setiap strim.
inline int geti() { static int i = ios_base::xalloc(); return i; }
2. Tentukan Fungsi Manipulator:
Buat fungsi untuk menetapkan dan menyahset keadaan tersimpan.
ostream& add_one(ostream& os) { os.iword(geti()) = 1; return os; } ostream& add_none(ostream& os) { os.iword(geti()) = 0; return os; }
3. Intercept Numeric Output:
Buat facet my_num_put untuk memintas output angka dan gunakan kenaikan 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())); } };
4. Uji Manipulator:
Gunakan manipulator untuk menambah nilai angka seterusnya dan paparkan hasilnya.
int main() { // outputs: 11121011 cout.imbue(locale(locale(),new my_num_put)); cout << add_one << 10 << 11 << add_none << 10 << 11; }
Tetapkan Semula Penambahan Sekali Pakai:
Jika anda ingin menambah hanya nombor seterusnya, tetapkan semula keadaan yang disimpan selepas setiap panggilan ke do_put.
Atas ialah kandungan terperinci Bagaimanakah Anda Boleh Mencipta Manipulator Strim C Tersuai untuk Mengubah Suai Item Strim Seterusnya?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!