Maison >développement back-end >C++ >Comment créer un flux d'entrée à partir d'une mémoire constante en C ?
Création d'un flux d'entrée à partir d'une mémoire constante
Pour lire des données à partir d'un tampon de mémoire constante comme s'il s'agissait d'un flux, un tampon de flux personnalisé peut être créé. Ce tampon référencera l'emplacement mémoire constant sans modifier son contenu.
Implémentation :
Le code suivant définit un tampon de flux, membuf, et un flux d'entrée, imemstream, en utilisant le tampon membuf :
#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)) { } };
Dans ce code, membuf est initialisé avec un pointeur de caractère et une taille de données constants. Il configure le tampon d'entrée (setg) pour pointer vers ces données. imemstream hérite à la fois de membuf et de std::istream, enveloppant efficacement la mémoire constante dans un flux d'entrée.
Utilisation :
Pour utiliser l'imemstream, instanciez-le avec le pointeur et taille de mémoire constante :
imemstream in(data, size);
Les données peuvent ensuite être lues à partir du flux comme habituel :
in >> x >> y >> w;
Remarque : Le const_cast est nécessaire car std::streambuf::setg nécessite un pointeur de caractère non const. Bien que le tampon de flux ne modifie pas les données, l'interface nécessite ce type pour plus de flexibilité dans les tampons de flux "normaux".
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!