我有一个C++翻译单元,我需要为其中的两个类禁用RTTI,但是没有其他的。有没有像#pragma rtti(off)这样的东西或者我可以用的东西?
我只需要禁用那个类的RTTI。我不会抛出、捕获、dynamic_cast或任何这个类,所以我只是不需要RTTI。当然,它的方法的实现需要用RTTI编译,因为它们确实会抛出异常,这只是生成这个类型信息对象,我需要阻止它。
发布于 2014-05-28 18:35:50
若要在g++中禁用特定类的RTTI,而不禁用任何其他类(在有限的测试用例上进行测试,请注意):
virtual void nortti();。让它成为第一个虚拟函数。fno-rtti编译这个文件。发布于 2014-05-28 16:41:17
如果您使用的是微软的编译器,您可以使用__declspec(novtable)关闭特定类的vtable。这会产生副作用,导致RTTI在该类中失败。如果它是一个具体的类,那么它也会产生副作用,使您无法使用虚拟函数,这是一个非常严重的缺点--小心使用。它被设计用于接口,在这些接口中,基类永远不会被实例化。
显然,在g++:declspec(novtable)?中没有类似的能力
https://stackoverflow.com/questions/23912955
复制相似问题