Rumah > pembangunan bahagian belakang > C++ > Bagaimanakah Anda Boleh Mencipta Strim daripada Penampan Memori Malar Tanpa Mengubah Data?

Bagaimanakah Anda Boleh Mencipta Strim daripada Penampan Memori Malar Tanpa Mengubah Data?

Linda Hamilton
Lepaskan: 2024-11-09 08:15:02
asal
524 orang telah melayarinya

How Can You Create a Stream from a Constant Memory Buffer Without Altering the Data?

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

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

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

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!

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