Heim > Backend-Entwicklung > C++ > Wie erstelle ich einen Eingabestream aus dem konstanten Speicher in C?

Wie erstelle ich einen Eingabestream aus dem konstanten Speicher in C?

Linda Hamilton
Freigeben: 2024-11-10 16:49:02
Original
836 Leute haben es durchsucht

How to Create an Input Stream from Constant Memory in C  ?

Erstellen eines Eingabestreams aus dem Konstantspeicher

Zum Lesen von Daten aus einem Konstantspeicherpuffer, als wäre es ein Stream, ein benutzerdefinierter Streampuffer erstellt werden können. Dieser Puffer verweist auf den konstanten Speicherort, ohne seinen Inhalt zu ändern.

Implementierung:

Der folgende Code definiert einen Stream-Puffer, membuf, und einen Eingabestream, imemstream, Verwendung des Membuf-Puffers:

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

In diesem Code wird Membuf mit einem konstanten Zeichenzeiger und einer konstanten Datengröße initialisiert. Es richtet den Eingabepuffer (setg) so ein, dass er auf diese Daten zeigt. imemstream erbt sowohl von membuf als auch von std::istream und verpackt den konstanten Speicher effektiv in einen Eingabestream.

Verwendung:

Um den imemstream zu verwenden, instanziieren Sie ihn mit dem konstanter Speicherzeiger und Größe:

imemstream in(data, size);
Nach dem Login kopieren

Daten können dann wie gewohnt aus dem Stream gelesen werden:

in >> x >> y >> w;
Nach dem Login kopieren

Hinweis: Der const_cast ist notwendig, da std: :streambuf::setg erfordert einen nicht konstanten Zeichenzeiger. Während der Stream-Puffer die Daten nicht verändert, benötigt die Schnittstelle diesen Typ für Flexibilität in „normalen“ Stream-Puffer.

Das obige ist der detaillierte Inhalt vonWie erstelle ich einen Eingabestream aus dem konstanten Speicher in C?. 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