【问题标题】:C++ Boost io streams, error handlingC++ Boost io 流,错误处理
【发布时间】:2010-11-12 06:44:24
【问题描述】:

是否可以使自定义流像标准流一样工作以解决错误?那就是默认使用 good/fail/bad/eof 位而不是异常?

boost 文档只提到为流错误抛出 std::failure 并让其他错误传播(例如,尝试分配缓冲区的 badalloc),但是 boost 代码似乎没有捕获这些,而是​​依赖于用户处理它们的代码,但是我所有现有的代码都依赖于 good()、bad() 等方法和 clear() 方法,以防出错后需要重试。

【问题讨论】:

标签: c++ boost error-handling iostream boost-iostreams


【解决方案1】:

来自http://www.trip.net/~bobwb/cppnotes/lec08.htm

错误状态可以使用:

void clear(iostate = 0);

默认值为零会导致设置 ios_base::goodbit。

清除();

因此等价于

清除(0);

相当于

清除(ios_base::goodbit);

注意 ios_base::goodbit 是一个非零值。 clear() 可用于将其他位之一设置为特定对象的 operator>>() 程序员代码的一部分。例如:

if (bad_char) is.clear(ios_base::badbit); // 设置 istream 的坏位

【讨论】:

  • 这不能回答问题。问题是Boost I/O 流是否公开了类似的接口。
  • 我回答时读到的问题是询问有关使用自定义流然后引用增强流的问题。我不清楚他是否只对增强流感兴趣,是他自己对它们进行子类化,还是对他自己的自定义流感兴趣。
猜你喜欢
  • 2015-01-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-03-13
相关资源
最近更新 更多