現在、次のようにstd::ofstream
を使用しています。
std::ofstream outFile;
outFile.open(output_file);
次に、次のようにstd::stringstream
オブジェクトをoutFile
に渡そうとします。
GetHolesResults(..., std::ofstream &outFile){
float x = 1234;
std::stringstream ss;
ss << x << std::endl;
outFile << ss;
}
これで、私のoutFile
にはゴミのみが含まれます: "0012E708"が繰り返されます。
GetHolesResults
に書くことができます
outFile << "Foo" << std:endl;
outFile
に正しく出力されます。
私が間違っていることに関する提案はありますか?
これを行うことができますが、文字列を作成する必要はありません。出力ストリームに右側のストリームのコンテンツを読み取らせます(任意のストリームで使用可能)。
outFile << ss.rdbuf();
_std::ostringstream
_を使用していて、なぜss.rdbuf()
で何も書き込まれないのか疑問に思っている場合は、.str()
関数を使用します。
_outFile << oStream.str();
_
Stringstream rdbufをストリームに渡すと、改行は変換されません。入力テキストには\n
を含めることができるため、検索置換は機能しません。古いコードはfstreamに書き込み、それをstringstreamに切り替えるとendl変換が失われます。
私はss.str();
の代わりにss.rdbuf();
を書きたい(そして文字列ストリームを使用する)。
ss.rdbuf()
を使用すると、outFile
のフォーマットフラグがリセットされ、コードが再利用できなくなります。つまり、GetHolesResults(..., std::ofstream &outFile)
の呼び出し元は、結果をテーブルに表示するために次のようなものを書きたいかもしれません。
outFile << std::setw(12) << GetHolesResults ...
...そして、なぜ幅が無視されるのか疑問に思います。