Pertama, sepertinya saya meminta pendapat subjektif, tapi bukan itu yang saya cari. Saya ingin mendengar beberapa argumen kuat tentang topik ini.
Dengan harapan mendapatkan wawasan tentang bagaimana aliran modern / kerangka kerja serialisasi seharusnya dirancang, saya baru-baru ini mendapatkan sendiri salinan buku Standard C ++ IOStreams dan Locales oleh Angelika Langer dan Klaus Kreft . Saya pikir jika iOStreams tidak dirancang dengan baik, itu tidak akan membuatnya menjadi pustaka standar C ++.
Setelah membaca berbagai bagian buku ini, saya mulai ragu apakah iOStreams dapat dibandingkan dengan misalnya STL dari sudut pandang arsitektur keseluruhan. Baca misalnya wawancara ini dengan Alexander Stepanov ("penemu" STL) untuk mempelajari tentang beberapa keputusan desain yang masuk ke dalam STL.
Apa yang mengejutkan saya khususnya :
Tampaknya tidak diketahui siapa yang bertanggung jawab atas desain keseluruhan IOStreams (Saya ingin membaca beberapa informasi latar belakang tentang ini - apakah ada yang tahu sumber daya yang baik?);
Setelah Anda mempelajari di bawah permukaan langsung iOStreams, mis. Jika Anda ingin memperpanjang iOStreams dengan kelas Anda sendiri, Anda bisa masuk ke antarmuka dengan nama fungsi anggota yang cukup samar dan membingungkan, misalnya
getloc
/imbue
,uflow
/underflow
,snextc
/sbumpc
/sgetc
/ /sgetn
,pbase
/pptr
/epptr
(dan ada mungkin contoh yang lebih buruk). Ini membuatnya jauh lebih sulit untuk memahami desain keseluruhan dan bagaimana bagian tunggal bekerja sama. Bahkan buku yang saya sebutkan di atas tidak membantu bahwa banyak (IMHO).
Demikian pertanyaan saya:
Jika Anda harus menilai dengan standar rekayasa perangkat lunak saat ini (jika memang ada kesepakatan umum mengenai hal ini), apakah IOStreams C ++ masih dianggap dirancang dengan baik? (Saya tidak ingin meningkatkan keterampilan desain perangkat lunak saya dari sesuatu yang umumnya dianggap ketinggalan zaman.)
std::streambuf
adalah kelas dasar untuk membaca dan menulis byte, dan istream
/ ostream
untuk in- dan output yang diformat, menggunakan pointer std::streambuf
sebagai tujuan / sumbernya.
ostream foo(&somebuffer); foo << "huh"; foo.rdbuf(cout.rdbuf()); foo << "see me!";