在 C++ 中按名称访问结构体字段的现代方法

gis*_*sil 6 c++ reflection struct template-meta-programming

我想检查在现代 C++ 中是否有一种直观且简单的方法可以按名称访问结构体字段。我知道类似的问题已经被提出和回答,并且 C++ 反射是一个经过深入研究的主题。我遇到过这样的图书馆:

但所有这些方法的共同点是,它们只允许您获取结构体中字段的总数或在结构体中执行特定操作for_each对结构体的所有字段执行某种操作。

是的,我显然可以通过使用来检查我正在寻找的字段的具体“名称”for_each是的,通过使用这些库提供的功能但我只是想检查是否有其他简单/众所周知的库已经做到了这一点。我希望能够处理任意数量的嵌套结构,这就是为什么我正在寻找开箱即用的东西。

正如 Louis Go 所指出的,如果有一个像这样的访问器就太好了:

auto field = namespace::getField<mystruct>("fieldname");
Run Code Online (Sandbox Code Playgroud)

eer*_*ika -3

您可以使用成员访问运算符按名称访问类成员。例子:

struct foo {
    int bar;
} instance;

instance.bar = 42; // access by name
Run Code Online (Sandbox Code Playgroud)

如果您打算根据字符串变量而不是编译时标识符来访问成员,那么不行。从 C++20 开始,C++ 仍然没有实现此目的所需的反射功能。

很多时候,当程序员想要这个时,他们实际需要的是一个关联容器,例如std::map.