主要观点:对比 C++26 基于类型和基于值的反射实现,探讨其语法、语义及优缺点。
关键信息:
- 介绍 Reflection TS 的类型基于模型,包括
reflexpr(E)
等操作及相关库函数。 - 实现 Reflection TS 基于p2996 设计,包括反射操作符、对象序列等。
- 给出
get_element_t
、get_enumerators_t
、get_name_v
等的实现。 - 比较基于类型和基于值的实现
is_structural
,包括递归处理和实例化保护等方面。 - 指出基于值的反射实现更像常规编程,语法简洁且能处理更多情况。
重要细节: - Reflection TS 于 2020 年 3 月发布,其设计为类型基于模型,引入新操作符和库函数。
- 实现过程中定义了各种概念和辅助函数,如
Object
、ObjectSequence
等。 get_enumerators_t
通过substitute
将枚举反射转换为序列反射。is_structural
的实现需处理递归和实例化保护,可通过模板特化或if constexpr
实现。- 基于值的实现更简洁,可直接在值域中操作,利用逻辑运算符进行守卫,且可写imperative 代码。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。