问题描述
我想检查一下在现代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
。