我有一个创建取决于条件std::stringstream
或std::fstream
,像一个函数:分享的std :: fstream的或std :: stringstream的槽的std ::的iostream
// Some class, stringStream_ and fileStream_ are members
// obj.Stream() returns std::iostream&
if (condition)
{
stringStream_.str(std::string());
obj->Stream().rdbuf(stringStream.rdbuf());
}
else
{
boost::filesystem::path temp = boost::filesystem::unique_path();
fileStream_.open(temp.native().c_str(), std::ios_base::trunc | std::ios_base::in | std::ios_base::out);
obj->Stream().rdbuf(fileStream_.rdbuf());
}
,然后将此obj
对象在另一个线程处理,所以此时上述功能可能会再次被调用,并且streambuf
将在stringStream
中被重置,fileStream_
将无法打开新文件,因为它与另一个文件相关联。
我不能制作像obj.SetStream()
这样的功能,因为数据流是不可复制的。
的问题是:我怎么可以制作std::stringstream
或std::fstream
,它使对象成为流的所有者(注意对象存储std::iostream
因为它不知道什么类型的流将被传递)传递给目标。
在此先感谢。
是合法的写类似'的boost :: shared_ptr的<的std :: iostream的>流(新的std :: stringstream的)'? – maverik
@maverik:是的,是的,AFAIK。 – wilx
看起来像这个解决方案解决了这个问题。我会尽力。感谢您的回应。 – maverik