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
前もって感謝します。