【发布时间】:2013-02-05 19:36:10
【问题描述】:
我有一个函数可以根据条件创建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对象在另一个线程中被处理,所以此时上面的函数可能会被再次调用并且stringStream中的streambuf将被重置并且fileStream_将无法打开新文件,因为它与另一个相关联。
我无法创建像 obj.SetStream() 这样的函数,因为流是不可复制的。
问题是:我如何创建std::stringstream 或std::fstream 并将其传递给对象,以便对象成为流的所有者(注意对象存储std::iostream,因为它不知道什么类型流将被传递)。
提前致谢。
【问题讨论】: