Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah manipulator aliran tersuai boleh digunakan untuk mengubah suai item masa hadapan pada aliran keluaran dalam C?

Bagaimanakah manipulator aliran tersuai boleh digunakan untuk mengubah suai item masa hadapan pada aliran keluaran dalam C?

Linda Hamilton
Linda Hamiltonasal
2024-11-07 02:12:03208semak imbas

How can custom stream manipulators be used to modify future items on an output stream in C  ?

Pengubahsuaian Manipulator Strim Tersuai dalam C

Mengubah suai item masa hadapan pada strim dengan manipulator tersuai ialah teknik serba boleh dalam C . Walaupun manipulator seperti "hex" mengubah format output, manipulator yang melaraskan nilai, seperti "plusone," memberikan fleksibiliti yang lebih besar.

Untuk menyimpan keadaan dalam setiap strim, fungsi iword dan indeks xalloc digunakan.

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; }

Menggunakan aspek, output berangka boleh disesuaikan. Struktur my_num_put mengatasi kaedah do_put untuk menambah nilai berdasarkan keadaan 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())); 
    } 
}; 

Menggunakan manipulator ini, output berangka diubah suai:

int main() {
    // outputs: 11121011
    cout.imbue(locale(locale(),new my_num_put));
    cout << add_one << 10 << 11 
         << add_none << 10 << 11;
}

Untuk pengubahsuaian item tunggal, tetapkan semula perkataan kepada 0 selepas setiap panggilan do_put disyorkan.

Atas ialah kandungan terperinci Bagaimanakah manipulator aliran tersuai boleh digunakan untuk mengubah suai item masa hadapan pada aliran keluaran 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