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

Comment créer un flux d'entrée à partir d'une mémoire constante en C ?

Linda Hamilton
Libérer: 2024-11-10 16:49:02
original
845 Les gens l'ont consulté

How to Create an Input Stream from Constant Memory in 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)) {
    }
};
Copier après la connexion

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

Les données peuvent ensuite être lues à partir du flux comme habituel :

in >> x >> y >> w;
Copier après la connexion

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!

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