Czekam na dostarczanie operatorów ostream
dla niektórych klas matematycznych (macierzy, wektorów itp.) Znajomy zauważył, że implementacja biblioteki standardowej gcc operatora ostream
dla std::complex
obejmuje wewnętrzne użycie strumień ciąg sformatować wyjście przed przekazaniem go do rzeczywistego ostream
:Używanie strumienia w funkcji 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();
}
Ten wzór jest widoczny w impuls, jak również. Próbujemy ustalić, czy jest to wzór, który warto śledzić. Pojawiły się obawy, że obejmuje to dodanie dodatkowego nagłówka dla strumienia napisów i istnieją dodatkowe przydziały sterty wymagane w strumieniu ciągów, których można potencjalnie uniknąć.
Najprawdopodobniej zasugerowano, że jeśli klient wymaga tej funkcjonalności, może utworzyć strumień ciągów i samemu dokonać wstępnego przejścia.
Czy ktoś może mi pomóc zrozumieć, dlaczego uznano by to za dobrą praktykę i czy powinienem ją przyjąć?