gpt4 book ai didi

c++ - 通过 std::iostream 共享 std::fstream 或 std::stringstream

转载 作者:搜寻专家 更新时间:2023-10-31 01:50:44 24 4
gpt4 key购买 nike

我有一个根据条件创建 std::stringstreamstd::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::stringstreamstd::fstream 并将其传递给对象,以便对象成为流的所有者(注意对象存储 std::iostream 因为它不知道将传递什么类型的流)。

提前致谢。

最佳答案

您可以将指针(原始或智能)传递给动态分配的实例 std::fstreamstd::stringstream类型为指向 std::iostream 的指针.然后流的客户端只需要做类似 std::iostream & s = *iostreamPtr; s << "yay!"; 的事情。使用它。

关于c++ - 通过 std::iostream 共享 std::fstream 或 std::stringstream,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14715473/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com