Heim > Backend-Entwicklung > C++ > Wie können Sie einen Stream aus einem konstanten Speicherpuffer erstellen, ohne die Daten zu ändern?

Wie können Sie einen Stream aus einem konstanten Speicherpuffer erstellen, ohne die Daten zu ändern?

Linda Hamilton
Freigeben: 2024-11-09 08:15:02
Original
513 Leute haben es durchsucht

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

Erstellen eines Eingabestroms aus einem konstanten Speicher: Überwindung der Datenänderungsbeschränkung

Um das Problem des Lesens von Daten aus einem konstanten Speicherpuffer ohne zu lösen Wenn Sie es ändern, müssen Sie einen benutzerdefinierten Stream-Puffer erstellen. Dies kann durch die Definition einer Klasse erreicht werden, die vom Standard std::streambuf erbt und dessen relevante Funktionen überschreibt.

Konkret dient die unten definierte membuf-Klasse als Stream-Puffer:

struct membuf: std::streambuf {
    membuf(char const* base, size_t size) {
        char* p(const_cast<char*>(base));
        this->setg(p, p, p + size);
    }
};
Nach dem Login kopieren

Diese Klasse richtet den Stream-Puffer mit dem bereitgestellten Datenpuffer und seiner Größe ein und definiert im Wesentlichen den Bereich der zu lesenden Daten.

Um einen Eingabestream zu erstellen Basierend auf diesem Puffer definieren wir die imemstream-Klasse, die sowohl von membuf als auch von std::istream erbt:

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

Diese Klasse umschließt im Wesentlichen den benutzerdefinierten Stream-Puffer und stellt die Funktionalität eines Eingabestreams bereit. Jetzt ist es möglich, imemstream als regulären Eingabestream zu verwenden:

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

Mit dieser Technik kann man Daten aus einem konstanten Speicherpuffer lesen, als kämen sie aus einem Stream, wodurch das ursprüngliche Problem effektiv gelöst wird unter Beibehaltung der Unveränderlichkeit der Daten.

Das obige ist der detaillierte Inhalt vonWie können Sie einen Stream aus einem konstanten Speicherpuffer erstellen, ohne die Daten zu ändern?. 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