まず第一に、私は主観的な意見を求めているように見えるかもしれませんが、それは私が求めているものではありません。このトピックに関する根拠のある議論を聞いてみたいです。
最近のストリーム/シリアライゼーションフレームワークがどのように設計されるべきかについて洞察を得ることを期待して、私は最近、Angelika LangerとKlaus Kreftによる本「Standard C ++ IOStreams and Locales」のコピーを手に入れました。私は、IOStreamsが適切に設計されていなければ、そもそもC ++標準ライブラリに組み込まれていないと考えました。
この本のさまざまな部分を読んだ後、IOStreamsが全体的なアーキテクチャの観点からのSTLなどと比較できるかどうか疑問になり始めています。たとえば、アレクサンダーステパノフ(STLの「発明者」)とのこのインタビューを読んで、STLに入った設計上の決定について学びます。
特に私を驚かせるもの:
IOStreamsの全体的な設計の責任者は誰なのかは不明のようです(これについての背景情報をいくつか読みたいと思います。誰かが良いリソースを知っていますか?)。
あなたは、あなたがあなた自身のクラスとの入出力ストリームを拡張したい場合、あなたはかなり不可解とメンバ関数名を混乱とのインタフェースを取得入出力ストリームの直接の表面、例えば下に掘り下げ例えば一度
getloc
/imbue
、uflow
/underflow
、snextc
/sbumpc
/sgetc
/sgetn
、pbase
/pptr
/epptr
(とそこのおそらくさらに悪い例)。これにより、全体的な設計と単一の部品がどのように連携するかを理解することが非常に難しくなります。私は上記でさえ本は助けにならないことくらい(私見)。
したがって、私の質問:
あなたは(実際には存在している場合、今日のソフトウェアエンジニアリングの基準で判断しなければならなかった場合であるこれらの任意の一般的な合意が)、うC ++の入出力ストリームは、まだうまく設計されたとみなされますか?(ソフトウェアの設計スキルを、一般的に古いと考えられているものから改善したくありません。)
std::streambuf
バイトを読み書きするための基本クラスであり、istream
/ ostream
は、ポインタをstd::streambuf
宛先/ソースとして使用して、フォーマットされた入出力用です。
ostream foo(&somebuffer); foo << "huh"; foo.rdbuf(cout.rdbuf()); foo << "see me!";