给定一个指向 ASCII 字符串的常量 char* 指针,你能设计一个解决方案来读取数据吗就好像它是从文件中流式传输一样?关键要求是数据应保持不变。
解决方案在于创建自定义流缓冲区。这是一个自定义实现:
#include <streambuf> #include <istream> struct membuf: std::streambuf { membuf(char const* base, size_t size) { char* p(const_cast<char*>(base)); // Casting for interface compatibility 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)) {} };
使用此自定义缓冲区,您可以创建一个围绕常量数据的输入流:
// data points to a string "42 3.14 blah" imemstream in(data, data_size); int x; float y; std::string w; in >> x >> y >> w;
此方法允许您可以从常量内存中读取而不更改原始数据,这与需要复制的字符串流不同。
以上是是否可以使用自定义流缓冲区从常量内存中读取数据,就像从文件中读取数据一样?的详细内容。更多信息请关注PHP中文网其他相关文章!