Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana untuk Mencipta Manipulator Strim Tersuai yang Menambahkan Integer Keluaran Seterusnya dalam C?

Bagaimana untuk Mencipta Manipulator Strim Tersuai yang Menambahkan Integer Keluaran Seterusnya dalam C?

Patricia Arquette
Patricia Arquetteasal
2024-11-06 11:13:02108semak imbas

How to Create a Custom Stream Manipulator that Increments the Next Outputted Integer in C  ?

Mencipta Manipulator Strim Tersuai yang Mengubah Suai Item Seterusnya pada Strim

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!

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