基于类型的反射与基于值的反射

主要观点:对比 C++26 基于类型和基于值的反射实现,探讨其语法、语义及优缺点。
关键信息

  • 介绍 Reflection TS 的类型基于模型,包括reflexpr(E)等操作及相关库函数。
  • 实现 Reflection TS 基于p2996 设计,包括反射操作符、对象序列等。
  • 给出get_element_tget_enumerators_tget_name_v等的实现。
  • 比较基于类型和基于值的实现is_structural,包括递归处理和实例化保护等方面。
  • 指出基于值的反射实现更像常规编程,语法简洁且能处理更多情况。
    重要细节
  • Reflection TS 于 2020 年 3 月发布,其设计为类型基于模型,引入新操作符和库函数。
  • 实现过程中定义了各种概念和辅助函数,如ObjectObjectSequence等。
  • get_enumerators_t通过substitute将枚举反射转换为序列反射。
  • is_structural的实现需处理递归和实例化保护,可通过模板特化或if constexpr实现。
  • 基于值的实现更简洁,可直接在值域中操作,利用逻辑运算符进行守卫,且可写imperative 代码。
阅读 12
0 条评论