C++ 静态反射 TS:它会按名称支持 assign/call 吗?

C++ static reflection TS: would it support assign/call by name?

有一个C++ Technical Specification on static reflection (current PDF draft and cppreference page) 这可能会进入 C++23 或更高版本。

在目前的草案中是否可行(我知道语法可能还没有固定) 要按名称访问结构字段/调用 class 成员函数?

例如

struct Test {
  int x;
  int y; 
};

Test foo;

auto meta = reflexpr(foo);  // access meta information about class

some_magic_setter<"x", meta>(foo, 5);  // ??? Should do: `foo.x = 5` 

这可能吗?如果可以的话如何?

编辑:当我查看 TS draft 时,我发现大多数函数都被命名为 'get_XX'(如 get_typeget_scope、...)或'is_XXX'(如 is_private,...)似乎只提供信息(这显然是反射的目的)。但是,我找不到任何似乎允许成员访问给定对象的东西。欢迎任何提示。

get_pointer<X> 为您提供指向成员的指针,get_name<X> 获取其名称。加入一些遍历成员(也提供)和类型不匹配的处理(这可以在 中完成),鲍勃是你的叔叔。

C++ 提供编译时反射原语;所以据我所知,你必须自己编写胶水代码。

我将从一个使用反射创建(名称成员指针)对元组的函数开始。可以是纯constexpr.

然后另一个函数根据该结构进行设置,其中运行时失败在起作用。

这样您就可以分别对两个部分进行单元测试;只有“字典”的建设需要反思。