如何解决C++ 静态反射 TS:它是否支持按名称分配/调用?
有一个 C++ Technical Specification on static reflection(当前的 PDF draft 和 cppreference 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_type
、get_scope
、...)或“is_XXX”(像 is_private
,...) 似乎只提供信息(这显然是反思的目的)。但是,我找不到任何似乎允许对给定对象进行成员访问的内容。欢迎任何提示。
解决方法
get_pointer<X>
获取指向成员的指针,get_name<X>
获取其名称。加入一些迭代成员(也提供)和类型不匹配的处理(可以在 c++03 中完成),bob 是你的叔叔。
C++ 提供编译时反射原语;所以据我所知,你必须自己编写胶水代码。
我将从一个使用反射生成(名称成员指针)对的元组的函数开始。它可以是纯 constexpr
。
然后是另一个基于该结构进行设置的函数,其中运行时失败在起作用。
这会让你分别对这两部分进行单元测试;只有“字典”的构建需要反思。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。