首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >禁用某些类的RTTI

禁用某些类的RTTI
EN

Stack Overflow用户
提问于 2014-05-28 13:27:40
回答 2查看 2.5K关注 0票数 7

我有一个C++翻译单元,我需要为其中的两个类禁用RTTI,但是没有其他的。有没有像#pragma rtti(off)这样的东西或者我可以用的东西?

我只需要禁用那个类的RTTI。我不会抛出、捕获、dynamic_cast或任何这个类,所以我只是不需要RTTI。当然,它的方法的实现需要用RTTI编译,因为它们确实会抛出异常,这只是生成这个类型信息对象,我需要阻止它。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-05-28 18:35:50

若要在g++中禁用特定类的RTTI,而不禁用任何其他类(在有限的测试用例上进行测试,请注意):

  1. 将类定义移动到单独的头文件。
  2. 向类中添加一个新的虚拟函数virtual void nortti();。让它成为第一个虚拟函数。
  3. 将其实现放到一个单独的源文件中。用fno-rtti编译这个文件。
  4. 正常编译类实现的其余部分。
票数 3
EN

Stack Overflow用户

发布于 2014-05-28 16:41:17

如果您使用的是微软的编译器,您可以使用__declspec(novtable)关闭特定类的vtable。这会产生副作用,导致RTTI在该类中失败。如果它是一个具体的类,那么它也会产生副作用,使您无法使用虚拟函数,这是一个非常严重的缺点--小心使用。它被设计用于接口,在这些接口中,基类永远不会被实例化。

显然,在g++:declspec(novtable)?中没有类似的能力

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23912955

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档