Sto cercando di fornire gli operatori ostream
per alcune classi matematiche (matrice, vettore, ecc.) Un amico ha notato che l'implementazione della libreria standard gcc dell'operatore ostream
per std::complex
include l'uso interno di un flusso stringa per formattare l'output prima di passarlo al reale ostream
:Uso di stringstream all'interno della funzione 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();
}
Questo modello è visibile in spinta pure. Stiamo cercando di determinare se questo è un modello che vale la pena seguire. È stato espresso il timore che includa un'intestazione aggiuntiva per il flusso di stringhe e che siano richieste allocazioni di heap aggiuntive all'interno del flusso di stringhe che potrebbero potenzialmente essere evitate.
La maggior parte ragionevolmente è stato suggerito che se il client richiede tale funzionalità, quindi possono creare il flusso di stringa e fare il pre-pass stessi.
Qualcuno può aiutarmi a capire perché questo sarebbe considerato una buona pratica e se dovrei adottarlo?