微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

C++ 静态反射 TS:它是否支持按名称分配/调用?

如何解决C++ 静态反射 TS:它是否支持按名称分配/调用?

一个 C++ Technical Specification on static reflection(当前的 PDF draftcppreference page) 可能会迁移到 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 draft 时,我发现大多数函数都被命名为“get_XX”(例如 get_typeget_scope、...)或“is_XXX”(像 is_private,...) 似乎只提供信息(这显然是反思的目的)。但是,我找不到任何似乎允许对给定对象进行成员访问的内容。欢迎任何提示

解决方法

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

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

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

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

这会让你分别对这两部分进行单元测试;只有“字典”的构建需要反思。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。