1. 什么是反射?
反射是程序获取自身信息的能力
2. 反射有什么用?
可以用于动态创建类型,跨语言跨平台数据交互,持久化,序列化等等。
3. 反射包含哪些功能?
至少包含以下功能:枚举所有member
获取member的name和type
能够get/set member
4. 有哪些反射方法?
反射主要有3种实现方法结构化语言
比如xml/json/yml/protobuf等语言,或者dicom,tiff等数据格式,在标准里规范了如何获取字段的方法。
运行期反射
大多数语言都支持运行期反射,比如.NET系列,js, python, perl, matlab等。
编译期反射
目前只发现D语言有这个功能。C++用宏也能实现
5. C++反射有哪些方法?
5.1 编译器支持C++20据说有编译期反射,但那是可能是N年后的事情了。
MSVC的CLR扩展支持运行期反射,但CLR不算标准C++。
clang的智能补全插件,修改一下能输出结构体信息,可以做个工具,但这只适合clang。
5.2 运行期支持
各种debugger都能取得结构体信息的,可以利用。有些编译器在realse的时候,不输出符号,需要设置realse输出符号表才行。优点是用起来简单,缺点是跨平台不太好,网上能搜到一些代码,