有时,我们在开发中需要使用RTTI。什么?写的好的代码可以避免使用RTTI。不一定。什么情况下使用RTTI,一种很常见的例子,就是,我使用了一个父类指针容器,但是持有的是子类指针。并且,我需要调用子类指针的接口。这种情况下,就必须用RTTI了(或其他替代方案)。
使用RTTI的步骤。
#1.打开 项目目录\android\jni\Application.mk
#2.
注释APP_STL := stlport_static
添加两行:
APP_STL := gnustl_staticAPP_CPPFLAGS += -frtti
解释:NDK中默认关闭RTTI,所以使用-frtti开启。NDK中附带的stlport库不支持RTTI(也不支持异常)。所以,我们要将其替换为GNU的STL库。(NDK一共有四个STL库,system,stlport静态,stilport动态,gnu静态)
#3.
然后,使用cygwin控制台进入项目目录,clean一下。(最好直接删项目里的lib和obj文件夹,因为你改了编译选项,clean也是删不干净的。)
重新执行编译sh脚本即可
题外话:
1.我测试了自己的手机,黑屏原因不明,连cocos2dx自带例子用RTTI编译都不行。另外,也不是所有平台都支持RTTI,android也是后续才增加支持的。所以你用了RTTI兼容性需考虑。
2.RTTI会造成代码体积膨胀。效率可能会下降一点,不过我认为这不算什么问题。
3.替代方案,最简单的使用cocos2dx的setTag和getTag。不过这要你自己定义一套符号系统,而且看起来傻一些。
本文转自 老G 51CTO博客,原文链接:
http://blog.51cto.com/goldlion/762112
,如需转载请自行联系原作者