2009-12-05 34 views
2

我想使用boost :: asio,但我不想提升拋出異常,因爲在我的環境中,異常不能被引發。禁用BOOST中的異常?

我遇到過BOOST_NO_EXCEPTIONS,但documentation表示throw_exception的調用者可以認爲這個函數永遠不會返回。 但是用戶提供的函數怎麼不能返回呢?我需要在這裏插入什麼樣的替換函數?如果boost代碼想要拋出異常,我是否必須終止進程?

+0

我認爲所有可能拋出的boost ASIO函數都會提供一個顯式不會拋出的重載(ASIO錯誤)。這些重載要求你傳遞一個boost :: system :: error_code對象。 – Dan

回答

4

要麼終止進程,要麼使用您之前使用setjmp定義的使用longjmp的全局錯誤處理程序。

1

您似乎誤解了BOOST_NO_EXCEPTIONS的含義,它只會讓您有機會以一致的方式按照您的願望進行救援。

執行已進入無法繼續進行的狀態,即拋出異常時,如果用戶定義的throw_exception返回,則認爲行爲未定義是合乎邏輯的。

9

那麼,你是什麼想要做錯誤的條件? BOOST_NO_EXCEPTION並不神奇地使Boost源代碼使用將錯誤傳播回調用者的替代機制。所以,你要麼向stderr輸出一個錯誤並且死掉,要麼你一直到最頂層 - 泄露當前調用堆棧中可能分配的任何資源。