Memandangkan penunjuk char* berterusan kepada rentetan ASCII, bolehkah anda mencipta penyelesaian untuk membaca data seolah-olah ia mengalir dari fail? Keperluan penting ialah data harus kekal tidak diubah suai.
Penyelesaian terletak pada mencipta penimbal strim tersuai. Berikut ialah pelaksanaan tersuai:
#include <streambuf> #include <istream> struct membuf: std::streambuf { membuf(char const* base, size_t size) { char* p(const_cast<char*>(base)); // Casting for interface compatibility this->setg(p, p, p + size); } }; struct imemstream: virtual membuf, std::istream { imemstream(char const* base, size_t size) : membuf(base, size) , std::istream(static_cast<std::streambuf*>(this)) {} };
Dengan penimbal tersuai ini, anda boleh mencipta aliran input yang dililitkan pada data malar anda:
// data points to a string "42 3.14 blah" imemstream in(data, data_size); int x; float y; std::string w; in >> x >> y >> w;
Pendekatan ini membolehkan anda untuk membaca daripada memori tetap tanpa mengubah data asal, tidak seperti aliran rentetan yang memerlukan penyalinan.
Atas ialah kandungan terperinci Bolehkah Penampan Strim Tersuai Digunakan untuk Membaca Data daripada Memori Malar seolah-olah Ia Menstrim daripada Fail?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!