将std :: istream直接连接到C-Array / unsigned char *

时间:2013-02-04 14:02:53

标签: c++ istream

我目前正在处理一个自定义缓冲类,它在里面运行经典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;

有可能吗?

2 个答案:

答案 0 :(得分:2)

您可以使用std::ostrstream。它被弃用了,但考虑到它的用处,我无法想象它会很快消失。

否则,编写自己的omemstream非常简单。

答案 1 :(得分:1)

istream不是问题,问题是写一个streambuffer,因为例如ifstream只是一个派生自istream的类,包含一个streambuffer和一些粘合代码。现在,为了编写streambuffer,您需要覆盖私有虚拟输入函数。我认为underflow()和uflow()就足够了,但是使用这些关键字你应该能够自己找到所需的信息。

顺便说一句:Streams是不可复制的,除非在C ++ 11中有所改变,所以按值返回是不可行的。