Maison >développement back-end >C++ >Un tampon de flux personnalisé peut-il être utilisé pour lire des données à partir d'une mémoire constante comme si elles étaient diffusées à partir d'un fichier ?
Étant donné un pointeur char* constant vers une chaîne ASCII, pouvez-vous concevoir une solution pour lire les données comme s'il s'agissait d'une diffusion à partir d'un fichier ? L'exigence cruciale est que les données ne doivent pas être modifiées.
La solution réside dans la création d'un tampon de flux personnalisé. Voici une implémentation personnalisée :
#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)) {} };
Avec ce tampon personnalisé, vous pouvez créer un flux d'entrée enroulé autour de vos données constantes :
// 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;
Cette approche permet vous pouvez lire à partir de la mémoire constante sans altérer les données d'origine, contrairement aux flux de chaînes qui nécessitent une copie.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!