【发布时间】:2020-08-18 10:58:10
【问题描述】:
我想检查在现代 C++ 中是否有一种直观且简单的方法可以按名称访问结构字段。 我知道已经提出并回答了类似的问题,而 C++ 反射是一个经过充分研究的主题。 我遇到过这样的库:
但所有这些方法的共同点是,它们只允许您获取结构内的字段总数或以for_each 的方式对结构的所有字段进行某种操作。
是的,通过使用这些库提供的for_each 功能,我显然可以检查我正在寻找的字段的特定“名称”。但我只是想检查是否有任何其他琐碎/知名的库已经这样做了。
我希望能够处理任意数量的嵌套结构,这就是为什么我要寻找开箱即用的东西。
正如 Louis Go 所指出的,拥有这样的访问器会很棒:
auto field = namespace::getField<mystruct>("fieldname");
【问题讨论】:
-
也许发布伪代码来指定“如何”访问该字段?
auto field = namespace::getField<mystruct>("fieldname");? -
您期望得到什么结果类型?
struct可以具有不同类型的字段,因此您必须获得union、std::variant或std::any。你要哪一个? -
@LouisGo 确切地说,我已经根据您的建议编辑了我的问题。
-
@J.Schultke 使用上面的大多数反射库,用户无论如何都用一些宏重写了结构,所以我猜
std::variant在指定的结构中所有可能的类型都可以
标签: c++ struct reflection template-meta-programming