Maison > développement back-end > C++ > le corps du texte

Comment créer un flux à partir d'une mémoire tampon constante sans modifier les données ?

Linda Hamilton
Libérer: 2024-11-09 08:15:02
original
480 Les gens l'ont consulté

How Can You Create a Stream from a Constant Memory Buffer Without Altering the Data?

Création d'un flux d'entrée à partir d'une mémoire constante : surmonter la restriction d'altération des données

Pour résoudre le problème de la lecture de données à partir d'une mémoire tampon constante sans en le modifiant, il est nécessaire de créer un tampon de flux personnalisé. Ceci peut être réalisé en définissant une classe qui hérite du standard std::streambuf et remplace ses fonctions pertinentes.

Plus précisément, la classe membuf définie ci-dessous sert de tampon de flux :

struct membuf: std::streambuf {
    membuf(char const* base, size_t size) {
        char* p(const_cast<char*>(base));
        this->setg(p, p, p + size);
    }
};
Copier après la connexion

Cette classe configure le tampon de flux avec le tampon de données fourni et sa taille, définissant essentiellement la plage de données à lire.

Pour créer un flux d'entrée basé sur cela buffer, nous définissons la classe imemstream, qui hérite à la fois de membuf et de std::istream:

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

Cette classe enveloppe essentiellement le tampon de flux personnalisé et fournit les fonctionnalités d'un flux d'entrée. Désormais, il est possible d'utiliser imemstream comme flux d'entrée régulier :

imemstream in(data, size);
in >> value;
Copier après la connexion

En utilisant cette technique, on peut lire les données d'une mémoire tampon constante comme si elles provenaient d'un flux, résolvant ainsi efficacement le problème d'origine. tout en conservant l'immuabilité des données.

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