[基础]

反射是指审查元数据并收集关于它的类型信息的 能力。元数据(编译以后的最基本数据单元)就是一大堆的表,当编译程序集或者模块时,编译器会创建一个类定义表、一个字段定义表和一个方法定义表等。通常做便捷序列化和UI属性绑定相关

[方案]:

采用libclang+mustache+rttr+(序列化工具:json或者flatbuffer)

[LibClang]:

作为一个优秀的c++编译前端,我们需要libclang去扫描我们的代码去获取到我们打的一些标签,比如什么需要反射、以及一些元数据,比如UE代码中的UPROPERTY和UFUNCTION
我们先采用__attribute__和annotate(属性说明符序列(自 C++11 年起) - cppreference.com)给我们要打标记的地方打上我们不带任何语义的标记,但是这些标记可以生产到clang的ast中作为annotate attr ,并且clang 生产的ast语法树还是非常的有用的。

[mustache]:

Mustache是一套很简单的模板引擎,使用一种简单且易于理解的语法,主要采用两个大括号做占位符和两个大括号中间的name做标签。Mustache也提供了一些基本的条件和迭代功能。我们会去使用他写一些模板去生成反射的注册代码和序列化代码

[rttr]:

开源的在运行时注册反射的库,我们会使用他去将类的变量、函数和元数据都注册进去。

[json或者flatbuffer]:

这两个都是序列化用的,方便直接用json,性能用flatbuffer

[实现在我的]:

https://github.com/1393650770/MyRenderer