【问题标题】:connect std::istream directly to C-Array/unsigned char *将 std::istream 直接连接到 C-Array/unsigned char *
【发布时间】:2013-01-19 05:59:16
【问题描述】:

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

为了获得对该缓冲区的更舒适的读/写访问,我一直在寻找一种方法来构造一个直接连接到 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;

有可能吗?

【问题讨论】:

    标签: c++ istream


    【解决方案1】:

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

    要不然自己写omemstream很简单。

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2010-12-21
        • 2012-03-10
        • 1970-01-01
        • 2017-05-31
        • 1970-01-01
        • 2012-03-07
        • 2013-04-29
        相关资源
        最近更新 更多