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

问题描述

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

但是所有这些方法的共同点是,它们仅允许您获取结构中的字段总数,或者以for_each的方式对结构的所有字段进行特定操作。

是的,显然,通过使用这些库提供的for_each功能,我可以检查要查找的字段的特定“名称”。但是我只是想检查是否有其他琐碎/众所周知的库已经在执行此操作。 我希望能够处理任意数量的嵌套结构,这就是为什么我要开箱即用。

正如Louis Go所指出的,拥有这样的访问器会很棒:

auto field = namespace::getField<mystruct>("fieldname");

解决方法

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

struct foo {
    int bar;
} instance;

instance.bar = 42; // access by name

如果您要基于字符串变量而不是通过编译时间标识符来访问成员,则否。从C ++ 20开始,C ++仍然没有实现此功能所必需的反射功能。

经常,当程序员希望这样做时,他们实际需要的是一个关联容器,例如std::map