【问题标题】:Disable Exceptions in BOOST?在 BOOST 中禁用异常?
【发布时间】:2009-12-05 19:18:38
【问题描述】:

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

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

【问题讨论】:

  • 我认为所有可能抛出的 boost ASIO 函数都提供了一个明确不抛出的重载(ASIO 错误)。这些重载需要你传入一个 boost::system::error_code 对象。
  • 例如在函数中调用exit(1);会在函数有机会返回之前退出程序。

标签: c++ exception boost


【解决方案1】:

好吧,你想要在错误情况下做什么? BOOST_NO_EXCEPTION 不会神奇地使 Boost 源代码使用将错误传播回调用者的替代机制。因此,您要么将错误打印到 stderr 并死掉,要么 longjmp 一直到顶部 - 泄漏当前调用堆栈上的函数可能已分配的任何资源。

【讨论】:

    【解决方案2】:

    要么终止进程,要么使用之前用 setjmp 定义的 longjmp 转到全局错误处理程序之类的东西。

    【讨论】:

      【解决方案3】:

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

      执行已进入无法继续执行的状态,即抛出异常时,因此如果用户定义的 throw_exception 返回,则认为该行为未定义是合乎逻辑的。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-12-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多