C++ 动态获取结构中成员的值

C++ 动态获取结构中成员的值,c++,data-structures,struct,structure,C++,Data Structures,Struct,Structure,这里有一个结构: struct date { int day; int month; int year; }frmt; 初始化结构并为成员分配值。 现在,我想使用动态变量获取成员的值 通常,我们使用frmt.day来获取该成员的价值。 现在让std::string str1=day; 如何使用str1获取成员值? 我可以使用str1.c_str吗?对于示例中的简单结构,您可以使用std::map或std::unordered_map。在这种情况下,您应该在代码中的所有位置将fr

这里有一个结构:

struct date
 {
  int day;
  int month;
  int year;
 }frmt;
初始化结构并为成员分配值。 现在,我想使用动态变量获取成员的值

通常,我们使用frmt.day来获取该成员的价值。 现在让std::string str1=day; 如何使用str1获取成员值? 我可以使用str1.c_str吗?

对于示例中的简单结构,您可以使用std::map或std::unordered_map。在这种情况下,您应该在代码中的所有位置将frmt.day替换为frmt[day]等。因此,您可以调用frmt[str1]


如果一个结构有各种类型的成员,那么可以使用std::variant而不是int,因为C++17。

必须使用代码手动执行。C++没有反射,但是它可能在C++ 20中添加。@ HOLYBLASKORD抱歉…我不明白。你能给出一个例子吗?如果STR1=天STD::CUT考虑一个STD::String到int De:::*成员指针的映射。当然,您必须自己填充该地图。在运行时,如果不自己添加额外的机器,则无法按成员的名称对其进行寻址。您可以使用或Boost.Preprocessor生成if-else-if链的所述映射。这是解决问题的一种可能方法,但不能解决问题本身。当访问哪个成员不依赖于运行时信息时,您将失去在固定时间内直接寻址成员的能力。当然,这是一种解决方法。至于直接寻址成员,OP可以通过引用访问map成员,就像在他的示例中一样,甚至可以构建引用结构,比如struct simple{int&day;simpleint&day{};简单frmt2frmt[天];。它不是POD,但谁知道OP想要做的有多深。@S.M.谢谢你……我会尝试……它是一个通用的实现,我不能对值或成员进行硬编码