我目前正在处理一个自定义缓冲类,它在里面运行经典C-Array(unsigned char [])中的数据。
为了获得对该缓冲区的更舒适的读/写访问,我一直在寻找一种构建std :: istream对象的方法,该对象直接连接到POD内容...也就是C-Array内存。目标是使用所有std :: stream格式化程序,并将实际数据“lorem ipsum”直接写入缓冲区。所以像这样:
std::istream QuirkyBuffer::getIStream() { return std::istream(this->ptr, this->size); }
QuirkyBuffer d;
auto is = d.getIStream();
"lorem ipsum" >> is;
有可能吗?
答案 0 :(得分:2)
您可以使用std::ostrstream
。它被弃用了,但考虑到它的用处,我无法想象它会很快消失。
否则,编写自己的omemstream
非常简单。
答案 1 :(得分:1)
istream不是问题,问题是写一个streambuffer,因为例如ifstream只是一个派生自istream的类,包含一个streambuffer和一些粘合代码。现在,为了编写streambuffer,您需要覆盖私有虚拟输入函数。我认为underflow()和uflow()就足够了,但是使用这些关键字你应该能够自己找到所需的信息。
顺便说一句:Streams是不可复制的,除非在C ++ 11中有所改变,所以按值返回是不可行的。