gpt4 book ai didi

c++ - 从常量内存创建输入流

转载 作者:IT老高 更新时间:2023-10-28 21:34:08 33 4
gpt4 key购买 nike

我在 const char* 指针指向的缓冲区中有一些数据。数据只是一个 ASCII 字符串。我知道它的大小。我希望能够以与从流中读取数据相同的方式读取它。我正在寻找一种可以让我编写如下代码的解决方案:

// for example, data points to a string "42 3.14 blah"
MemoryStreamWrapper in(data, data_size);
int x;
float y;
std::string w;
in >> x >> y >> w;

重要条件:不得以任何方式复制或更改数据(否则我只会使用字符串流。据我所知,不可能创建字符串流来自 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*>()在流缓冲区中:流缓冲区不会更改数据,但接口(interface)仍然需要char*要使用,主要是为了更容易更改“正常”流缓冲区中的缓冲区。有了这个,你可以使用 imemstream作为普通输入流:

imemstream in(data, size);
in >> value;

关于c++ - 从常量内存创建输入流,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13059091/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com