C++ - 实现自己的流

11
你好!我的问题可以描述如下:
我有一些数据,实际上是一个数组,可以表示为具有一些大小的 char* data
我还有一些旧代码(函数),它以某个抽象的 std::istream 对象作为参数,并使用该流来检索要操作的数据。
所以,我的问题是:将我的 data 映射到某个 std::istream 对象的简单方法是什么,以便我可以将其传递给我的函数?我考虑过从我的 data 创建一个 std::stringstream 对象,但这意味着复制和(我认为)不是最佳解决方案。
有什么想法可以使我的 std::istream 直接在 data 上操作吗?
谢谢。
3个回答

11

如果您想要创建自己的流,我建议您查看Boost.Iostreams库。它使得创建自己的流对象变得容易。


而且,如果我没有记错的话,它已经有了从std::vector或数组中提取数据的黏合剂。 - Thanatos

5

2

使用字符串流:

#include <sstream>

int main()
{
    char[]  data = "PLOP PLOP PLOP";
    int     size = 13;  // PS I know this is not the same as strlen(data);

    std::stringstream  stream(std::string(data, size));

    // use stream as an istream;
}

如果您想要真正高效,可以直接修改流缓冲区。我没有尝试过这种方法,也没有编译器进行测试,但以下内容应该可以实现:

#include <sstream>

int main()
{
    char[]  data = "PLOP PLOP PLOP";
    int     size = 13;  // PS I know this is not the same as strlen(data);

    std::stringstream  stream;
    stream.rdbuf()->pubsetbuf(data, size);

    // use stream as an istream;
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接