2009-07-20 44 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