2009-07-20 76 views
3

是否有可能使自定义流像stanadrd那样工作以处理错误?那是在缺省情况下使用good/fail/bad/eof位而不是异常?C++ Boost io流,错误处理

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

+0

你在看哪个Boost文档? – 2009-11-15 01:22:12

+0

http://www.boost.org/doc/libs/1_39_0/libs/iostreams/doc/index.html – 2009-11-16 16:01:03

+2

http://www.boost.org/doc/libs/1_39_0/libs/iostreams/doc/ guide/exceptions.html#standard_iostreams “第三种可能性是遵循std :: basic_streambuf的示例,并允许过滤器和设备的成员函数通过抛出异常或返回指定的错误指示符来指示错误。因为它会使各种滤波器和设备概念的规格复杂化,并使stream_buffer的内部更难以理解和维护。“ – akramer 2011-12-27 21:02:59

回答

1

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

错误状态可以通过设置为:

空隙清晰(iostate = 0);

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

clear();

因此相当于

clear(0);

这相当于

清晰(的ios_base :: goodbit);

请注意,ios_base :: goodbit是一个非零值。可以使用clear()将其他位设置为程序员对特定对象的操作符>>()的代码的一部分。例如:

if(bad_char)is.clear(ios_base :: badbit); // set istream's badbit

+0

这不回答这个问题。问题是关于[Boost](http://www.boost.org/)I/O流是否暴露类似的接口。 – 2012-04-03 20:56:08

+0

我在回答时读到的问题是询问如何使用自定义流,然后引用提升流。我不清楚他是否只对增援流感兴趣,如果他自己将他们分类,或他自己的定制流。 – gymbrall 2012-04-03 21:41:44