#定义 造元数据实现(构名,...)\
//根据变长参数,用元组来保存内部结构
静 动 反成(构名 常&){\
构 反射成员{\
常式 推导(动)静 应现(){\//这里.
中 造元组(__变长实参__);\
}\
用 型=空;\
用 大小类型=整常<整,取参个数(__变长实参__)>;\//参数个数
常式 静 串视 名(){中 串视(#构名,型长(#构名)-1);}\//为啥要减1?
常式 静 整 值(){中 大小类型::值;}\
常式 静 数组<串视,大小类型::值>数组(){中 数组_##构名;}\
};\
中 反射成员{};\
}//其实就是(类的实例)
#定义 造元数据(构名,N,...)\
常式 内联 数组<串视,N>数组_##构名={扩展宏(宏连接(常串,N)(__变长实参__))};\//生成串.隐藏了.
造元数据实现(构名,造参列表(N,&构名::字段,__变长实参__))//展开了.不如1个for来替换掉.
}
这里更详细解释adl
查找时,也会查找T
类型的空间.
using type = decltype(to_extend(t)); // 探测有没有对应的to_extend函数,ADL查找保证
因为to_extend(t)
是一系列类型
的函数.t
是挨个在宏
中生成的.即用一堆
函数,而不是一个模板特化
.然后内部再返回类型(伏地魔)
.