C ++ - 实现我自己的流

时间:2010-06-06 23:40:46

标签: c++ string stream std

您好!我的问题可以通过以下方式描述:

我有一些实际上是数组的数据,可以用char* data表示size

我还有一些遗留代码( function ),它将一些抽象的std::istream对象作为参数,并使用该流来检索要操作的数据。

所以,我的问题如下 - 将data映射到某个std::istream对象的简单方法是什么,以便将其传递给我的函数?我考虑过从我的std::stringstream创建一个data对象,但这意味着复制和(我认为)并不是最好的解决方案。

有任何想法可以做到这一点,以便std::istream直接对data进行操作吗?

谢谢。

3 个答案:

答案 0 :(得分:10)

如果您正在考虑实际创建自己的流,我会查看Boost.Iostreams库。它可以轻松创建自己的流对象。

答案 1 :(得分:5)

绝对不是最简单的方法,但万一有人想了解std流如何在里面工作,这似乎是一个非常好的介绍,你可以自己动手:

http://www.mr-edd.co.uk/blog/beginners_guide_streambuf

答案 2 :(得分: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;
}