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

Mary-Kate Olsen
Lepaskan: 2024-11-07 10:38:03
asal
555 orang telah melayarinya

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;
}
Salin selepas log masuk

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; }
Salin selepas log masuk

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())); 
    } 
}; 
Salin selepas log masuk

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;
}
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan