记录:C++ 编译期静态反射

如何优雅地实现 C++ 编译期静态反射 https://mp.weixin.qq.com/s/y1GULGBR-ktn-2N1fJ8CDw

文章讲得不错。

提取一下重点:使用T t = {。。。};语法可以提取出结构体T的成员数量。

原理:当{。。。}里面给的初始化值个数小于等于T的成员数量时,初始化语法成立。

          如果初始化值个数超过T的成员数量时,初始化语法不成立,会编译报错。

据此,使用SFINAE机制就可以获得成员数量啦。

不过,这个文章还不是最优解。BOOST1.75刚刚出炉了PFR库:

Basic reflection without macro or boilerplate code for user defined types, from Antony Polukhin.

完全不需要用户做任何事情就获得了反射。

提取一下重点:知道了成员数量,就可以使用结构化绑定 auto [。。。] = T();语法提取出每一个成员的类型啦。

不过,C++没有办法自动创建不定数量的变量名,所以,PFR库只能预先硬编码了最多支持100个成员的信息提取

打开boost\pfr\detail\core17_generated.hpp看一下就知道啦。

当然了,这一步可以使用boost::preprocess库来自动化,就是能让这个文件更短点,看起来更“酷”点,并无实质收益。

具体要处理的细节当然还非常非常多,不过,核心就这么些了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值