如何通过自定义的streambuf设置流的坏点

pow*_*ete 5 c++ std stream

我有一个定制的std::streambuf。就像是:

class mybuf : public std::streambuf {
  ...
  virtual std::streambuf::int_type underflow() {
    if(eof) {
     return traits_type::eof();
    }
    ...
  }
  ...
  std::istream stream(new mybuf(...));
Run Code Online (Sandbox Code Playgroud)

eof通过在underflow()函数上返回eof来设置流的标志。

如何设置badbit流的标志?该overflow()函数应该抛出异常吗?

San*_*ker 3

抛出异常确实是正确的方法。

请参阅 的参考页std::ios_base::iostate,特别是:

badbit由以下标准库函数设置:

  • ...
  • 每个流 I / O 函数,如果关联流缓冲区的任何成员函数抛出异常(例如sbumpc()、、、 等)xsputn()sgetc()overflow()
  • ...