2013-02-04 47 views
3

我目前正在处理一个自定义缓冲区类,它在其内部传递其经典C数组(无符号字符[])中的数据。将std :: istream直接连接到C数组/无符号字符*

为了获得对该缓冲区更为舒适的读/写访问权限,我正在寻找一种方法来构建直接连接到POD内容的std :: istream对象...也就是C阵列内存。目标是将所有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

您可以使用std::ostrstream。它已被弃用,但鉴于其实用性,我无法想象它很快就会消失。

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

1

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

顺便说一句:流是不可复制的,除非在C++ 11中进行了更改,所以通过值返回是一个禁止行为。