我有一个C ++翻译单元,我需要在其中禁用两个类的RTTI,但没有别的。是否有#pragma rtti(off)
之类的东西可供我使用?
我只需要为该类禁用RTTI。我没有抛出或捕获或者dynamic_cast或者这个类的任何东西,所以我根本不需要RTTI。它的方法的实现当然需要使用RTTI编译,因为它们确实可以抛出异常,它只是我需要抑制的这一个typeinfo对象的生成。
答案 0 :(得分:3)
要在g ++中为特定类禁用RTTI而不执行任何其他操作(在有限的测试用例中测试,请谨慎操作):
virtual void nortti();
。使它成为第一个虚拟功能。fno-rtti
。答案 1 :(得分:2)
如果您使用的是Microsoft编译器,则可以使用__declspec(novtable)
关闭特定类的vtable。这会导致RTTI在该类中失败。如果它是一个具体的类,这也是一个让你无法使用虚函数的副作用,这是一个相当严重的缺点 - 谨慎使用。它被设计用于基类永远不会被实例化的接口。
显然,g ++中没有相似的能力:Is there a g++ equivalent to Visual Studio's __declspec(novtable)?