在BOOST中禁用例外?

时间:2009-12-05 19:18:38

标签: c++ exception boost

我想使用boost :: asio但我不希望boost抛出异常,因为在我的环境中不能引发异常。

我遇到BOOST_NO_EXCEPTIONS,但documentation 表示throw_exception的调用者可以假定此函数永远不会返回。 但是用户如何提供功能却无法返回?我需要在这里插入什么替换功能?如果boost代码想要抛出异常,我是否必须终止该过程?

3 个答案:

答案 0 :(得分:9)

那么,你希望在错误情况下做什么? BOOST_NO_EXCEPTION并没有神奇地使Boost源代码使用将错误传播回调用者的替代机制。所以,你要么把错误打印到stderr并且死掉,要么你一直到最顶层 - 泄漏调用堆栈上当前函数可能分配的任何资源。

答案 1 :(得分:4)

您可以使用longjmp终止进程,也可以使用setjmp先前定义的longjmp转发类似全局错误处理程序的内容。

答案 2 :(得分:1)

您似乎误解了BOOST_NO_EXCEPTIONS的含义,它只是让您有机会以一致的方式以您想要的方式进行救助。

执行已经进入了一个状态,它无法再继续,也就是抛出异常时,所以如果用户定义了throw_exception,那么认为行为未定义是合乎逻辑的。