Rumah > pembangunan bahagian belakang > C++ > 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
Lepaskan: 2024-11-06 11:13:02
asal
178 orang telah melayarinya

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

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

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

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!

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