在软件开发中,通常需要从内存缓冲区读取数据而不复制或更改其内容。其中一种情况是数据存储在常量字符指针 (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
一旦创建了流缓冲区,就可以使用它来初始化输入流并从缓冲区读取数据:
imemstream in(data, size); int x; float y; std::string w; in >> x >> y >> w;
以上是如何从不可变内存创建输入流?的详细内容。更多信息请关注PHP中文网其他相关文章!