3 回答
TA贡献1808条经验 获得超4个赞
这样做的方法是创建一个合适的流缓冲区。例如,可以这样做:
#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*>()流缓冲区中的内容:流缓冲区不会更改数据,但仍需要char*使用该接口,主要是为了更轻松地更改“常规”流缓冲区中的缓冲区。这样,您可以将其imemstream用作普通输入流:
imemstream in(data, size);
in >> value;
TA贡献1862条经验 获得超6个赞
唯一的方法是将std :: istream子类化(这也需要将std :: streambuf子类化)以创建自己的从常量内存读取的流类。
这并不像听起来那样容易,因为C ++标准库流类非常混乱且设计不良。除非您需要大量扩展,否则我认为这不值得。
TA贡献1802条经验 获得超4个赞
上周,我了解到我们目前的目标是C ++ 2014!也就是说,需要在4月份提交完整的建议书,准备将其提交工作文件-尽管这是一个很小且实际上有用的功能,但我认为这种情况不会发生。一个绊脚石是,每当为IOStreams提出任何建议时,都会有一个主要的抱怨:“我们能不能有更好的东西?” 但没有人提出更好的建议……
- 3 回答
- 0 关注
- 371 浏览
添加回答
举报