Mencipta Strim Input daripada Memori Malar: Mengatasi Sekatan Perubahan Data
Untuk menangani masalah membaca data daripada penimbal memori malar tanpa mengubahnya, adalah perlu untuk mencipta penimbal strim tersuai. Ini boleh dicapai dengan mentakrifkan kelas yang mewarisi daripada std::streambuf standard dan mengatasi fungsinya yang berkaitan.
Secara khusus, kelas membuf yang ditakrifkan di bawah berfungsi sebagai penimbal strim:
struct membuf: std::streambuf { membuf(char const* base, size_t size) { char* p(const_cast<char*>(base)); this->setg(p, p, p + size); } };
Kelas ini menyediakan penimbal strim dengan penimbal data yang disediakan dan saiznya, pada asasnya mentakrifkan julat data untuk dibaca.
Untuk mencipta strim input berdasarkan penimbal ini, kami mentakrifkan kelas imemstream, yang mewarisi daripada kedua-dua membuf dan std::istream:
struct imemstream: virtual membuf, std::istream { imemstream(char const* base, size_t size) : membuf(base, size) , std::istream(static_cast<std::streambuf*>(this)) { } };
Kelas ini pada asasnya membungkus penimbal strim tersuai dan menyediakan kefungsian strim input. Kini, anda boleh menggunakan imemstream sebagai aliran input biasa:
imemstream in(data, size); in >> value;
Dengan menggunakan teknik ini, seseorang boleh membaca data daripada penimbal memori yang berterusan seolah-olah ia datang daripada aliran, menyelesaikan masalah asal dengan berkesan sambil mengekalkan kebolehubahan data.
Atas ialah kandungan terperinci Bagaimanakah Anda Boleh Mencipta Strim daripada Penampan Memori Malar Tanpa Mengubah Data?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!