原文:InsideUe4
总结 :
类型系统 强调的是程序运行期间内建立起来的类型信息树组织
反射则强调运行时通过类型系统提供的信息创建对象,读取对象属性以及方法的一种能力
为什么要是用反射
1.通过反射能够更通用的调用类对象函数,而不需要判断对象类型(例如Unity通过反射调用Updat、FixUpdate)
2.为数据序列化提供支持
TODO
C++中提供基础的RTTI主要通过typeid以及dynamic_cast
typeid:这个关键字的主要作用就是用于让用户知道是什么类型,并提供一些基本对比和name方法,作用也顶多只是让用户判断从属于不同的类型,所以其实说起来type_info的应用并不广泛,一般来说也只是把它当作编译器提供的一个唯一类型Id。
dynamic_cast:该转换符用于将一个指向派生类的基类指针或引用转换为派生类的指针或引用,使用条件是只能用于含有虚函数的类。转换引用失败会抛出bad_cast异常,转换指针失败会返回null。
实现反射的方案
通过宏:
基本思想是采用手动标记。在程序中用手动的方式注册各个类,方法,数据。
通过模板:
C++中的模板是应该也可以算是最大区别于别的语言的一个大杀器了,引导其强大的编译器类型识别能力构建出相应的数据结构