动态地为结构变量赋值

时间:2015-07-18 19:12:14

标签: c++ variables struct

我正在尝试动态地将文件中的值分配给结构中的变量,但无法弄清楚如何执行此操作。我有一个结构:

Tag push events

我还有一个函数循环遍历一个可以读取这些值的文件,所以我最终会得到一个包含变量名称及其值需要更新的行。因此,例如,我最终可能会得到两个变量:

struct abc {
 int age = 0;
 string name = "whatever";
} *ABC;

处理以下文件的第一行后:

KEY="age"
VAL="21"

如何将VAL值分配给ABC结构变量KEY?

谢谢!

更新:

所以我想做点什么:

age|21
name|bill

含义

ABC.KEY = VAL

1 个答案:

答案 0 :(得分:1)

您正在寻找的内容称为反射,而C ++不提供此功能。

如果要将键与结构成员匹配,则必须自己构建一个结构和函数。

例如,您可以考虑这个:

std::unordered_map<std::string, std::function<void(std::string, abc&)>> mapping;
mapping["age"] = [](std::string str, abc& a) { a.age = std::stoi(str); };
mapping["name"] = [](std::string str, abc& a) { a.name = str; }

现在您可以像

一样使用地图了
abc output;
auto key = ...;
auto value = ...;
if (mapping.find(key) == mapping.end())
    throw ...;
mapping[key](value, output);