0

有一个关于静态反射的 C++ 技术规范(当前PDF 草案cppreference 页面)可能会进入 C++23 或更高版本。

在当前草案中(我理解语法可能还没有固定)是否有可能通过名称访问结构字段/调用类成员函数?

例如

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草案时,我发现大多数函数都被命名为 'get_XX' (like get_type, get_scope, ...) 或 'is_XXX' (like is_private, ...) 这似乎只提供信息(这显然是反思的目的)。但是,我找不到任何似乎允许成员访问给定对象的东西。欢迎任何提示。

4

1 回答 1

1

get_pointer<X>给你一个指向成员的指针,get_name<X>得到它的名字。加入一些迭代成员(也提供)和类型不匹配的处理(可以在中完成),并且 bob 是你的叔叔。

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

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

然后是另一个基于该结构进行设置的函数,其中运行时失败正在发挥作用。

这将让您分别对这两个部分进行单元测试;只有“词典”的建设需要反思。

于 2021-03-14T19:10:01.173 回答