私はostream
いくつかの数学クラス (行列、ベクトルなど) の演算子をostream
提供することを検討していstd::complex
ます。実際ostream
:
/// Insertion operator for complex values.
template<typename _Tp, typename _CharT, class _Traits>
basic_ostream<_CharT, _Traits>&
operator<<(basic_ostream<_CharT, _Traits>& __os, const complex<_Tp>& __x)
{
basic_ostringstream<_CharT, _Traits> __s;
__s.flags(__os.flags());
__s.imbue(__os.getloc());
__s.precision(__os.precision());
__s << '(' << __x.real() << ',' << __x.imag() << ')';
return __os << __s.str();
}
このパターンはブーストでも見られます。これが従う価値のあるパターンであるかどうかを判断しようとしています. 文字列ストリームに余分なヘッダーを含める必要があり、文字列ストリーム内に追加のヒープ割り当てが必要になる可能性があるという懸念がありました。
クライアントがその機能を必要とする場合、文字列ストリームを作成し、事前パスを自分で実行できることが最も合理的に提案されています。
なぜこれが良い習慣と見なされるのか、そしてそれを採用すべきかどうかを理解するのを手伝ってくれる人はいますか?