IOStream库有什么严重的select? (除了cstdio)
我正在寻找一个类似于iostreams的库,它执行转换,并允许写入内存缓冲区,文件和控制台。 但是,我想要一些types安全的,如iostream。 有没有严重的图书馆这样做?
能够指定输出编码的东西将是一个加号。
请注意,我并不对仅仅面向iostreams的库感兴趣,因为它们只是增加了iostream正在做的复杂性,例如boost::format
。
PreEmptive评论回应:我不想使用cstdio,因为使用该系统是不可能的代码输出位置不可知的。 也就是说,你必须调用一个函数来发送缓冲区,而且你必须调用另一个函数来发送文件,另一个用于控制台等等。
编辑2:在回应下面的评论乱七八糟:我厌倦了iostreams和cstdio。 这是更具体的原因。 我试图保留这个问题的“咆哮”,但是人们总是问我是否离开了我的摇杆,所以这是我的理由。
cstdio
- 无法正确处理Unicode字符
- 如果不进行手动缓冲区pipe理,就不能写入类似string的东西
- 通常需要支持非标准扩展(例如
vsnprintf
)才能使用(编辑:好的,现在C99中的C99标准库增加了大部分/全部) - 在不改变原始代码的情况下,不能改变输出的位置(非标准扩展,例如在glibc中允许你把文件指针当作缓冲区,这种做法是这样的…但是它仍然是一个非标准的扩展)
- 使安全“有趣”(到整个章节专注于安全文档解释问题,例如“printf”的格式string等)
- 不安全
input输出stream
- 慢
- 对于客户来说太复杂了。 如果只使用标准库中的内容,那么这是非常好的,但是尝试扩展内容几乎是不可能的。 我阅读了整个“标准C ++ IOStreams和Locale”书籍,这本书看起来是唯一一本关于这个主题的书籍 – 两次 – 我仍然不知道发生了什么。
我喜欢iostreams的概念,甚至使用operator<<
有些人似乎不喜欢,但似乎完全过于devise给我。 有人不应该花费无数小时阅读书籍来成为你图书馆的简单客户。 当然,如果你正在添加一个新的输出源或者我能理解的东西,但是……客户端应该被屏蔽掉。 (这不是什么图书馆的?)
这是C ++中唯一令人痛苦的事情,在其他编程语言中“正常工作”,我认为没有理由变得复杂。
提升 。 精神 。 齐为input, Boost 。 精神 。 噶的输出。 可以读取/写入任何可以表示为迭代器范围的内容。
您可能对Fast Format库感兴趣。 你可以在他们的网站上看到与其他各种图书馆的比较。