3

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

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

谢谢

4

2 回答 2

4

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

于 2013-01-28T09:14:37.880 回答
1

答案是“也许”。一些 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

于 2013-01-28T08:15:07.103 回答