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
Susan Sarandonasal
2024-11-09 04:47:01539semak imbas

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

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;

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!

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