Heim > Backend-Entwicklung > C++ > Hauptteil

Kann ein benutzerdefinierter Stream-Puffer verwendet werden, um Daten aus dem Konstantspeicher zu lesen, als ob sie aus einer Datei streamen würden?

Linda Hamilton
Freigeben: 2024-11-11 03:49:03
Original
827 Leute haben es durchsucht

Can a Custom Stream Buffer Be Used to Read Data from Constant Memory as if It Were Streaming from a File?

Eingabestrom aus dem Konstantspeicher

Problem

Können Sie angesichts eines konstanten char*-Zeigers auf eine ASCII-Zeichenfolge eine Lösung zum Lesen der Daten entwickeln? als würde es aus einer Datei streamen? Die entscheidende Voraussetzung ist, dass die Daten unverändert bleiben.

Lösung: Benutzerdefinierter Stream-Puffer

Die Lösung liegt in der Erstellung eines benutzerdefinierten Stream-Puffers. Hier ist eine benutzerdefinierte Implementierung:

#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)) {}
};
Nach dem Login kopieren

Verwendung

Mit diesem benutzerdefinierten Puffer können Sie einen Eingabestream erstellen, der um Ihre konstanten Daten gewickelt ist:

// 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;
Nach dem Login kopieren

Dieser Ansatz ermöglicht Sie können aus dem Konstantspeicher lesen, ohne die Originaldaten zu ändern, im Gegensatz zu String-Streams, die kopiert werden müssen.

Das obige ist der detaillierte Inhalt vonKann ein benutzerdefinierter Stream-Puffer verwendet werden, um Daten aus dem Konstantspeicher zu lesen, als ob sie aus einer Datei streamen würden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage