我想使用boost :: asio但我不希望boost抛出异常,因为在我的环境中不能引发异常。
我遇到BOOST_NO_EXCEPTIONS
,但documentation 表示throw_exception的调用者可以假定此函数永远不会返回。
但是用户如何提供功能却无法返回?我需要在这里插入什么替换功能?如果boost代码想要抛出异常,我是否必须终止该过程?
答案 0 :(得分:9)
那么,你希望在错误情况下做什么? BOOST_NO_EXCEPTION并没有神奇地使Boost源代码使用将错误传播回调用者的替代机制。所以,你要么把错误打印到stderr并且死掉,要么你一直到最顶层 - 泄漏调用堆栈上当前函数可能分配的任何资源。
答案 1 :(得分:4)
您可以使用longjmp终止进程,也可以使用setjmp先前定义的longjmp转发类似全局错误处理程序的内容。
答案 2 :(得分:1)
您似乎误解了BOOST_NO_EXCEPTIONS的含义,它只是让您有机会以一致的方式以您想要的方式进行救助。
执行已经进入了一个状态,它无法再继续,也就是抛出异常时,所以如果用户定义了throw_exception,那么认为行为未定义是合乎逻辑的。