从常量内存创建输入流
从常量内存缓冲区读取数据,就好像它是流一样,自定义流缓冲区可以被创建。该缓冲区将引用常量内存位置,而不修改其内容。
实现:
以下代码定义了一个流缓冲区 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中文网其他相关文章!