Prima di tutto, può sembrare che sto chiedendo opinioni soggettive, ma non è quello che sto cercando. Mi piacerebbe ascoltare alcuni argomenti ben fondati su questo argomento.
Nella speranza di avere un'idea di come dovrebbe essere progettato un moderno framework di streaming / serializzazione, di recente mi sono procurato una copia del libro Standard C ++ IOStreams and Locales di Angelika Langer e Klaus Kreft . Ho pensato che se IOStreams non fosse stato ben progettato, in primo luogo non sarebbe arrivato alla libreria standard C ++.
Dopo aver letto varie parti di questo libro, sto iniziando a dubitare che IOStreams possa essere paragonato, ad esempio, alla STL da un punto di vista architettonico complessivo. Leggi ad esempio questa intervista con Alexander Stepanov (l '"inventore" della STL) per conoscere alcune decisioni di progettazione che sono entrate nella STL.
Cosa mi sorprende in particolare :
Sembra sconosciuto chi sia stato responsabile del design complessivo di IOStreams (mi piacerebbe leggere alcune informazioni di base su questo - qualcuno conosce buone risorse?);
Dopo aver approfondito la superficie immediata di IOStreams, ad esempio se si desidera estendere IOStreams con le proprie classi, si arriva a un'interfaccia con nomi di funzioni membro abbastanza criptici e confusi, ad esempio
getloc
/imbue
,uflow
/underflow
,snextc
/sbumpc
/sgetc
/sgetn
,pbase
/pptr
/epptr
(e c'è esempi probabilmente anche peggiori). Ciò rende molto più difficile comprendere il design generale e il modo in cui le singole parti cooperano. Anche il libro che ho citato sopra non aiuta che molto (IMHO).
Quindi la mia domanda:
Se si dovesse giudicare per gli standard di ingegneria del software di oggi (se in realtà non v'è alcun accordo generale su questi), sarebbe s 'C ++ iostreams ancora essere considerato ben progettato? (Non vorrei migliorare le mie capacità di progettazione del software da qualcosa che è generalmente considerato obsoleto.)
std::streambuf
è la classe base per la lettura e la scrittura di byte e istream
/ ostream
è per input e output formattati, prendendo un puntatore a std::streambuf
come destinazione / sorgente.
ostream foo(&somebuffer); foo << "huh"; foo.rdbuf(cout.rdbuf()); foo << "see me!";