最近几个朋友在问有关BTS代码的问题, 所以我把我最近看的东西简单整理一下.
BTS里有很多基础的类如raw ,static_variant ,reflect 都是放在fc库中,
而现在fc库基本没有任何技术介绍资料. 所以只有去看类的实现代码去了解用法,
raw: 包含两个关键的函数, pack 和unpack , 每个函数分别有几十种模板特例, 根据函数重载和模板匹配规则, 编译系统在编译的时候就会生成模板实例,
pack:将变量数据(包含类)文件流化(变成二进制), 将数据压入sha256 离散函数的准备数据包中......
unpack: 将文件流(二进制)转换成变量数据(包含类),
在pack 和unpack 两个相反的过程中,如果被操作的数据不是变量而是类时,使用reflect将类展开, 并且分别对每个变量调用pack/unpack函数. 每个需要被pack和unpack 函数调用的对象需要实现重载 操作符<< >>
static_variant :
这个类和boost:variant 类 用途相同, 可以参考boost_variant 用法
reflect类
这个类包含了 多层的参数宏, 所以一个宏展开往往有几十行代码. 主要所用是用于raw:pack 和raw:unpack 两个函数展开类的.