【问题标题】:Is it possible to use Boost Program Options without RTTI?是否可以在没有 RTTI 的情况下使用 Boost Program Options?
【发布时间】:2013-01-28 07:24:10
【问题描述】:

我想在我的项目中禁用 RTTI。但是,这个项目使用 Boost Program Options,它本身依赖于不支持 -fno-rtti 的 Boost Any。

我想知道是否有任何解决方案可以在没有 RTTI 的情况下使用 Boost Program?通过定义宏还是不使用某些功能?

谢谢

【问题讨论】:

  • 程序选项无论如何都使用 boost::any,因为没有 RTTI 就没有使用 boost::any 的能力,所以你不能在没有 RTTI 的情况下使用 boost::po。

标签: c++ rtti boost-program-options boost-any


【解决方案1】:

答案是“不”。 Boost.PO 是基于 Boost.Any 的,目前用户无法避免这种依赖。 Boost.Any 给出了 Boost.PO 的主要存储结构,所以没有 Any 就无法编译 PO 的一些有用部分。

【讨论】:

    【解决方案2】:

    答案是“也许”。一些 boost 库将在禁用异常的情况下工作 - 有些则不会。 RTTI 也一样。

    我建议您查看您感兴趣的特定 boost 库的文档。

    例如,Boost.Array 将在禁用异常的情况下工作,但 Boost.Format 不会。

    如果您收到无法使用 typeid 和 -fno-rtti 之类的消息,那可能是在编译需要 RTTI 的 Boost 的某些部分时。发生错误的位置会告诉您(通常)是哪个库。

    你可以试试 BOOST_NO_RTTI 和 BOOST_NO_TYPEID ...

    http://www.boost.org/doc/libs/1_46_1/libs/exception/doc/configuration_macros.html

    【讨论】:

    • 我尝试了你建议的两个宏,不幸的是它对 boost Any 没有任何影响。但它确实适用于 Boost Variant 等其他库。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-03-04
    • 2014-06-16
    • 2020-01-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多