首页 > 后端开发 > C++ > 正文

如何从不可变内存创建输入流?

Susan Sarandon
发布: 2024-11-09 04:47:01
原创
517 人浏览过

How can I create an input stream from immutable memory?

从不可变内存构造输入流

在软件开发中,通常需要从内存缓冲区读取数据而不复制或更改其内容。其中一种情况是数据存储在常量字符指针 (const char*) 中。为了方便地从此类缓冲区中读取数据,创建输入流是一个可行的解决方案。

自定义流缓冲区可以方便从不可变内存创建输入流。下面是如何实现它:

#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)) {
    }
};
登录后复制

const_cast>流缓冲区中的 () 是必要的,因为流缓冲区不会修改数据,但接口需要一个 char。

一旦创建了流缓冲区,就可以使用它来初始化输入流并从缓冲区读取数据:

imemstream in(data, size);
int x;
float y;
std::string w;
in >> x >> y >> w;
登录后复制

以上是如何从不可变内存创建输入流?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板