Maison > développement back-end > C++ > Comment puis-je créer un flux d'entrée à partir d'une mémoire immuable ?

Comment puis-je créer un flux d'entrée à partir d'une mémoire immuable ?

Susan Sarandon
Libérer: 2024-11-09 04:47:01
original
551 Les gens l'ont consulté

How can I create an input stream from immutable memory?

Construire un flux d'entrée à partir d'une mémoire immuable

Dans le développement de logiciels, il est souvent nécessaire de lire des données à partir de tampons de mémoire sans copier ni modifier leur contenu. Un de ces scénarios est celui où les données sont stockées dans un pointeur de caractère constant (const char*). Pour permettre une lecture pratique à partir de tels tampons, la création d'un flux d'entrée est une solution viable.

Un tampon de flux personnalisé peut faciliter la création d'un flux d'entrée à partir d'une mémoire immuable. Voici comment l'implémenter :

#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)) {
    }
};
Copier après la connexion

Le const_cast&> () dans le tampon de flux est nécessaire car le tampon de flux ne modifie pas les données, mais l'interface nécessite un char.

Une fois le tampon de flux créé, vous pouvez l'utiliser pour initialiser un flux d'entrée et lisez les données du tampon :

imemstream in(data, size);
int x;
float y;
std::string w;
in >> x >> y >> w;
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal