完全理解。我以前实现过一版,需要用户注册成员变量,形成一个tuple. 然后遍历tuple.
后面的print代码就一样了: make_index_sequence+折叠表达式展开。
当时最难理解的,就是这个 (FoldExp, ...) 了。因为日常非元编程,这个点是我有意排除,决定不用。
没有template for 的折叠表达式展开(借助逗号表达式),给人的感觉是一桌好菜好酒,但不给好用的筷子,吃得时候得自己现做一双,或者下单等外卖来送筷子。筷子成了重点。
那一版另一个难的,就是定义成员变量类型,typedef Class::*Ptr,我也忘了语法。看到现在是 [: xxx :] ,挺好。
【 在 poocp 的大作中提到: 】
: 另外,std::index_sequence<Is ...>可以用g++ 16.1已经支持的template for来替代了,可读性要好些,我以前在编程技术版发的那个可变参数模板的匿名函数迭代也可以改成template for循环。
: @buildtolast 当时不写循环还真不是我炫技,那时候运行时循环变量不能作为下标去索引 constexpr 数组(除非编译器支持template for 或者 consteval for,当前尚未标准化)。
: 因此必须通过编译期索引序列展开(index_sequence + 折叠表达式)来实现“遍历”。
: ...................
--
修改:DoorWay FROM 113.132.10.*
FROM 113.132.10.*