Rumah > pembangunan bahagian belakang > C++ > Bagaimanakah saya boleh mencipta aliran input daripada memori tidak berubah?

Bagaimanakah saya boleh mencipta aliran input daripada memori tidak berubah?

Susan Sarandon
Lepaskan: 2024-11-09 04:47:01
asal
554 orang telah melayarinya

How can I create an input stream from immutable memory?

Membina Strim Input daripada Memori Tidak Boleh Berubah

Dalam pembangunan perisian, selalunya perlu membaca data daripada penimbal memori tanpa menyalin atau mengubah kandungannya. Satu senario sedemikian ialah apabila data disimpan dalam penunjuk aksara malar (const char*). Untuk mendayakan pembacaan mudah daripada penimbal sedemikian, mencipta strim input ialah penyelesaian yang berdaya maju.

Penimbal strim tersuai boleh memudahkan penciptaan strim input daripada memori yang tidak boleh diubah. Begini cara untuk melaksanakannya:

#include <streambuf>
#include <istream>

struct membuf : std::streambuf {
    membuf(char const* base, size_t size) {
        char* p(const_cast<char*&>(base));
        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)) {
    }
};
Salin selepas log masuk

Const_cast&> () dalam penimbal strim adalah perlu kerana penimbal strim tidak mengubah suai data, tetapi antara muka memerlukan aksara.

Setelah penimbal strim dicipta, anda boleh menggunakannya untuk memulakan strim input dan baca data daripada penimbal:

imemstream in(data, size);
int x;
float y;
std::string w;
in >> x >> y >> w;
Salin selepas log masuk

Atas ialah kandungan terperinci Bagaimanakah saya boleh mencipta aliran input daripada memori tidak berubah?. 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