我有一个创建std::stringstream
或std::fstream
取决于条件的函数,例如:
// 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
,因为它不知道将传递哪种类型的流)。
提前致谢。