一、反射框架介绍
在前面基本已经把基础的反射分析了一遍,通过这些学习,已经可以知道C++中反射的特点在哪里。他山之石,可以攻玉,在本篇就结合在网上的一些开源的反射框架来对反射加深一下印象。
目前开源的c++反射框架中,各种类型的都有,复杂的简单的,针对具体类型的和通用的。一般来说,大厂和国外的开源写得相对要好一些,但不是说个人写的就不好,个人一般很多都是自己针对自己的具体场景,所以可能通用性差一些。另外可能个人的编程水平也参差不齐可能有些代码看上去不好,但重要的不是这些,是要看其实现机制和手段是否有可取之处,鲁迅先生的“拿来主义”要学会。
目前常见的c++反射库,一般比较好的有CLANG提供的工具,Boost.Reflection即Boost.PFR,Qt,谷歌的protobuf也可以用来实现反射。另外一些小有名气开源框架有magic_enum(针对枚举)和动态运行时反射的RTTR等。这些都可以在github上找到源码。
在github上还有很多的开源的反射库,大家在掌握了反射的原理和相关的机制后就可以去学习和参考其代码,舍短取长,融汇贯通,写出自己一个反射框架(库)。
二、magic_enum
在网上有开源的一个框架magic_enum,可以搞定枚举的反射,它其实就使用前一篇中所述的__PRETTY_FUNCTION__ 来实现的,这里不多做赘述,只给一个简单的例子:
#include "include/magic_enum/magic_enum.hpp"
enum class RgbColor {
RGB_RED,RGB_BLACK,RGB_WHITE,NOTHING};
void GetColorMagic(const std::string& str)
{
RgbColor rgb = RgbColor::RGB_BLACK;
std::cout << "rgb value:" << static_cast