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.
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)) {} };
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;
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!