c++ - 为结构变量动态赋值

标签 c++ variables struct

我正在尝试将文件中的值动态分配给结构中的变量,但不知道该怎么做。我有一个结构:

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

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

KEY="age"
VAL="21"

在它处理了以下文件的第一行之后:

age|21
name|bill

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

谢谢!

更新:

所以我想做类似的事情:

ABC.KEY = VAL

意义

ABC.age = 21

最佳答案

您正在寻找的是反射,而 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; }

现在你可以像这样使用 map 了

abc output;
auto key = ...;
auto value = ...;
if (mapping.find(key) == mapping.end())
    throw ...;
mapping[key](value, output);

关于c++ - 为结构变量动态赋值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31494658/

相关文章:

c++ - Boost::regex 问题,匹配 HTML span 元素

c++ - 我们可以使用 const_cast 将 const vector<string> 转换为 vector<string> 吗?

c - C中结构初始化中的表

c++ - SSDP 使用 M-SEARCH 获取共享文件夹列表?

c++ - 如何将 char 数组放入 std::string

javascript - 是否可以使用一个变量的值来定义 JavaScript 字符串中另一个变量的名称?

ios - 对象自动设置为零

ios - 将 IBOutlet 变量传递给另一个类

c++ - 提取代码时出现奇怪的 OpenGL 问题

c - 删除列表中的最后一个元素