首页 >后端开发 >C++ >如何在 C 中从常量内存创建输入流?

如何在 C 中从常量内存创建输入流?

Linda Hamilton
Linda Hamilton原创
2024-11-10 16:49:02792浏览

How to Create an Input Stream from Constant Memory in C  ?

从常量内存创建输入流

从常量内存缓冲区读取数据,就好像它是流一样,自定义流缓冲区可以被创建。该缓冲区将引用常量内存位置,而不修改其内容。

实现:

以下代码定义了一个流缓冲区 membuf 和一个输入流 imemstream,利用 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)) {
    }
};

在此代码中,membuf 使用常量 char 指针和数据大小进行初始化。它设置输入缓冲区(setg)以指向该数据。 imemstream 继承自 membuf 和 std::istream,有效地将常量内存包装在输入流中。

用法:

要使用 imemstream,请使用以下命令实例化它:常量内存指针和大小:

imemstream in(data, size);

然后可以像往常一样从流中读取数据:

in >> x >> y >> w;

注意: const_cast 是必要的,因为 std: :streambuf::setg 需要一个非常量字符指针。虽然流缓冲区不会修改数据,但该接口需要这种类型以实现“正常”流缓冲区的灵活性。

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

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn