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_type
、get_scope
、...)或'is_XXX'(如 is_private
,...)似乎只提供信息(这显然是反射的目的)。但是,我找不到任何似乎允许成员访问给定对象的东西。欢迎任何提示。
get_pointer<X>
为您提供指向成员的指针,get_name<X>
获取其名称。加入一些遍历成员(也提供)和类型不匹配的处理(这可以在 c++03 中完成),鲍勃是你的叔叔。
C++ 提供编译时反射原语;所以据我所知,你必须自己编写胶水代码。
我将从一个使用反射创建(名称成员指针)对元组的函数开始。可以是纯constexpr
.
然后另一个函数根据该结构进行设置,其中运行时失败在起作用。
这样您就可以分别对两个部分进行单元测试;只有“字典”的建设需要反思。
有一个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_type
、get_scope
、...)或'is_XXX'(如 is_private
,...)似乎只提供信息(这显然是反射的目的)。但是,我找不到任何似乎允许成员访问给定对象的东西。欢迎任何提示。
get_pointer<X>
为您提供指向成员的指针,get_name<X>
获取其名称。加入一些遍历成员(也提供)和类型不匹配的处理(这可以在 c++03 中完成),鲍勃是你的叔叔。
C++ 提供编译时反射原语;所以据我所知,你必须自己编写胶水代码。
我将从一个使用反射创建(名称成员指针)对元组的函数开始。可以是纯constexpr
.
然后另一个函数根据该结构进行设置,其中运行时失败在起作用。
这样您就可以分别对两个部分进行单元测试;只有“字典”的建设需要反思。