在库中实现简单的重定位

主要观点:介绍在 C++中通过反射实现[P2786R8](“C++26 的简单可重定位性”),展示反射可解决的问题,包括实现判断简单可重定位类型、适合简单重定位的类等相关函数和特性。
关键信息

  • 定义了is_trivially_relocatable函数用于判断类型是否为简单可重定位类型。
  • is_eligible_for_trivial_relocation函数用于判断类是否适合简单重定位。
  • is_trivially_relocatable_class_type函数用于判断类是否为简单可重定位类,分三种情况(类可重定位说明符、无用户声明特殊成员函数的联合、满足特定重载决议条件)。
  • 引入了TriviallyRelocatable注解用于标记类可重定位属性,可显式选择或拒绝。
  • 对于复杂的重载决议相关的情况,采用了一些 hack 方法来近似判断。
    重要细节
  • type_remove_cvtype_remove_all_extents等类型特质的使用。
  • 在判断适合简单重定位的类时,对各种成员函数和特殊成员函数的检查。
  • 在实现过程中对一些命名冲突的处理及约定,如所有特质都加type_前缀。
  • 给出了具体的代码示例,如C类通过注解实现可重定位,F类自动为简单可重定位类等。
阅读 16
0 条评论