正在寻求在C ++标准中未明确规定的std :: basic_streambuf?

时间:2012-01-17 14:28:17

标签: c++ standards

C ++标准说($ 27.6.3.4.2)std::basic_streambuf::seekoffstd::basic_streambuf::seekpos的效果是针对从std::streambuf派生的每个类别单独定义的。但是std::istream / std::ostream怎么可以工作呢?后两个类的接口的定义至少有关于pubseekoff / pubseekpos的参数意味着什么的几个假设。

似乎没有std::basic_streambuf部分的澄清,并不是所有实现std::basic_streambuf接口的子类都可以与流一起使用,即使它们支持任意搜索。例如,根据当前规范,子类可以说在MyStreamBuf::seekoff中,参数which = ios_base::in ond which = ios_base::out分别控制输出和输入序列(注意:反转)。我认为除了通常的“支持”和“不支持”之外,特定的搜索操作可以被指定为“支持但具有不同的接口”,这是非常反直觉的。或者那是标准的意图吗?

1 个答案:

答案 0 :(得分:5)

寻求非常有限。关于所有你可以确定将工作的任何一个 流是寻求到流的开头,寻求到最后,或 寻求你从tell获得的职位。如果是流 双向,你必须在每次改变方向时寻求。

如果您对该流有更多了解,您可以做更多;在...上 例如,stringstream,您几乎可以在任何地方寻找,并且 寻求输入不会影响输出中的位置,副 反之亦然。在fstream上,语义还取决于流是否存在 以文本模式或二进制文件打开,可能在实际文件上打开 在流后面:如果它是在`“/ dev / tty”(Unix)上打开ifstream或者 “CONS”(Windows),然后你可能根本找不到(但可能不会 如果你尝试错误。