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)) { } };
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);
Daten können dann wie gewohnt aus dem Stream gelesen werden:
in >> x >> y >> w;
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!