从知道其名称来改变变量的值

时间:2014-01-17 14:16:25

标签: c++ string variables

我想知道如果我知道它的名字是否有办法改变某个变量的值?

例如,假设您有一个名为“profile”的结构,其中包含几个变量:id,address,height,weight等。假设所有变量都有默认值,'height'的值为60.现在让别人给你一个字符串作为输入:“height = 80”。我想要做的是能够读取输入,解析它并将值更改为'高度'为80.我可以做的前两部分(读取和解析),我不知道的是如何改变价值。

有什么建议吗?如果您可以添加代码示例,我将不胜感激。

2 个答案:

答案 0 :(得分:3)

你要求反思。据我所知,C ++不提供此功能,或者仅提供非常有限的编译时间。也许这个问题可能有所帮助:How can I add reflection to a C++ application?

Java和C#提供此功能,但很多人对其使用持怀疑态度。在你的情况下,我会创建一个包含字符串和指针的地图。您可以简单地使用字符串作为键并设置它的值。如果您只有少量参数,只需使用if-else分支。

答案 1 :(得分:0)

C ++没有提供在运行时按名称访问变量的机制。原因是编译的程序不使用源代码中出现的名称。

但是,您可以编写某种查找功能。您必须明确包含您想要访问的所有变量,这可能非常费力。这是一个非常简单的例子:

int g_width = 100;
int g_height = 50;

void setVariable(std::string name, int value)
{
    if (name == "width") g_width = value;
    else if (name == "height") g_height = value;
}

int main()
{
    setVariable("height", 80);
    return 0;
}

(我只使用全局变量来保持简单。我通常不会推荐它们!)

你可以扩展这个想法。例如,您可以创建一个更通用的查找表结构,它将名称映射到指针(即指向内存中实际变量的指针)。然后,调用代码可以使用指针执行任何操作,而不是像上面的setVariable()示例那样依赖于显式函数。