您好!我的问题可以通过以下方式描述:
我有一些实际上是数组的数据,可以用char* data
表示size
我还有一些遗留代码( function ),它将一些抽象的std::istream
对象作为参数,并使用该流来检索要操作的数据。
所以,我的问题如下 - 将data
映射到某个std::istream
对象的简单方法是什么,以便将其传递给我的函数?我考虑过从我的std::stringstream
创建一个data
对象,但这意味着复制和(我认为)并不是最好的解决方案。
有任何想法可以做到这一点,以便std::istream
直接对data
进行操作吗?
谢谢。
答案 0 :(得分:10)
如果您正在考虑实际创建自己的流,我会查看Boost.Iostreams库。它可以轻松创建自己的流对象。
答案 1 :(得分:5)
绝对不是最简单的方法,但万一有人想了解std流如何在里面工作,这似乎是一个非常好的介绍,你可以自己动手:
答案 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;
}