首先,这似乎看起来是在寻求主观意见,但这不是我想要的。我希望听到一些有根据的关于这个话题的论点。
为了了解现代流/序列化框架应该如何设计,我最近购买了Angelika Langer和Klaus Kreft合著的书《C++标准库IOStreams和Locales》。我认为,如果IOStreams没有被很好地设计,它就不会首先进入C++标准库。
在阅读了这本书的各个部分后,我开始怀疑IOStreams是否可以从整体结构的角度与STL相比较。例如,请阅读与STL之父Alexander Stepanov的采访,了解一些导致STL的设计决策。
特别令我惊讶的是:
似乎不知道谁负责IOStreams的整体设计(我很想阅读一些关于此背景信息的资源 - 有人知道好的资源吗?);
一旦你深入IOStreams的表面,例如如果你想用自己的类扩展IOStreams,你就会遇到一个接口,其中成员函数名称相当神秘和令人困惑,例如
getloc
/imbue
、uflow
/underflow
、snextc
/sbumpc
/sgetc
/sgetn
、pbase
/pptr
/epptr
(可能还有更糟糕的例子)。这使得理解整体设计及其单个部分如何协作变得更加困难。即使是我上面提到的那本书也没能帮助那么多。
因此我的问题是:
如果按照当今的软件工程标准(如果实际上有任何普遍协议),您会认为C++的IOStreams仍然是设计良好的吗?(我不想从被普遍认为已经过时的东西中提高我的软件设计技能。)
std::streambuf
是读写字节的基类,而istream
/ostream
则是用于格式化输入和输出的类,将一个指向std::streambuf
的指针作为它们的目标/来源。 - Johannes Schaub - litbostream foo(&somebuffer); foo << "huh"; foo.rdbuf(cout.rdbuf()); foo << "see me!";
- Johannes Schaub - litbstd::streambuf
支持文本I/O。 - curiousguy