Heim >Backend-Entwicklung >C++ >Wie können Sie einen Stream aus einem konstanten Speicherpuffer erstellen, ohne die Daten zu ändern?
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); } };
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)) { } };
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;
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!