Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah Anda Boleh Mencipta Manipulator Strim C Tersuai untuk Mengubah Suai Item Strim Seterusnya?

Bagaimanakah Anda Boleh Mencipta Manipulator Strim C Tersuai untuk Mengubah Suai Item Strim Seterusnya?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-11-07 10:38:03560semak imbas

How Can You Create a Custom C   Stream Manipulator to Modify Subsequent Stream Items?

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

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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn