3

我目前正在处理一个自定义缓冲区类,该类在其内部以经典 C 数组(无符号字符 [])的形式携带其数据。

为了获得对该缓冲区的更舒适的读/写访问,我正在寻找一种方法来构造一个直接连接到 POD 内容的 std::istream 对象......也就是 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;

有可能这样做吗?

4

2 回答 2

2

你可以用std::ostrstream这个。它已被弃用,但考虑到它的用处,我无法想象它很快就会消失。

否则,编写自己的omemstream.

于 2013-02-04T14:04:33.177 回答
1

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

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

于 2013-02-04T22:48:10.670 回答