ostream &
パラメータを取り、o
その ostream に書き込む関数があるとします。operator <<
実装は良い例です。
ostream& operator << (ostream& o, const MyThing& t)
{
// ... interesting code here ...
return o;
}
関数内で、ストリームの書式設定オプションを指定したい場合があります。o
たとえば、関数に渡されるときに がどのように構成されていても、数値を 16 進数として出力したい場合があります。
第 2 に、現在の書式設定フラグについて推測できるようになりたいと思うかもしれません。たとえば、別の方法で要求しない限り、数値が 10 進数としてフォーマットされていると想定できると便利です。
最後に、関数が終了するまでに、書式設定オプションをo
関数が呼び出される前と同じにして、呼び出し元に変更されないようにします。これは単に発信者に対する礼儀の問題です。
これまではostringstream
、関数内に local を作成し、その上ですべての作業 (書式設定オプションの設定を含む) を行い、関数の最後に .str()
toを送信することでこれを達成してきました。ここでの StackOverflow の質問は、私より賢い人が同じアプローチを取ることを示唆しています。 ただし、ostringstreams に非常に多くのデータを保持しているため、以前に出力に送信される可能性があることが気になります (文字列が非常に大きくなる可能性があります)。o
2 つの質問があります。
1)一時的な(スタックベースの)ostreamを作成し、そのostreamで作業を行うことは、合法的、慣用的、適切な形式ですか?o.rdbuf()
私自身のテストとcppreference.comのページは、私ができることを示唆しているようです。
ostream& operator << (ostream& o_, const MyThing& t)
{
ostream o (o_.rdbuf());
// write stuff to "o",
// setting formatting options as I go.
return o_; // Formatting on the parameter ostream o_ unchanged.
}
2)私が考えていない別のより良い方法はありますか?