Ich bin in Bereitstellung von ostream
Betreibern für einige Mathematik-Klassen (Matrix, Vektor, etc.) Ein Freund hat festgestellt, dass die GCC-Standardbibliothek Implementierung der ostream
Operator für std::complex
umfasst die interne Verwendung von ein String-Stream die Ausgabe zu formatieren, bevor es zum eigentlichen ostream
vorbei:Verwendung von stringstream in Ostream-Funktion
/// 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();
}
Dieses Muster ist sichtbar im Boost-als auch. Wir versuchen herauszufinden, ob dies ein Muster ist, dem man folgen sollte. Es gab Bedenken, dass ein zusätzlicher Header für den String-Stream enthalten sein muss und dass zusätzliche Heap-Zuordnungen innerhalb des String-Streams erforderlich sind, die möglicherweise vermieden werden könnten.
Am vernünftigsten wurde vorgeschlagen, dass, wenn der Client diese Funktionalität benötigt, sie den String-Stream erstellen und die Pre-Pass selbst durchführen können.
Kann mir jemand helfen zu verstehen, warum dies als gute Praxis angesehen wird und ob ich es übernehmen sollte?