使用用户变量来访问struct的成员? C ++

时间:2016-02-01 07:57:31

标签: c++ variables struct

说我有以下结构:

struct movie {
    char movie_name[32];
    int rating;
    int release_year;
    char location;
}

通常情况下,我会通过说“movie.rating”来获得评分。

对于这个项目,我必须从文本文件中获取输入。我将从文件中读取一个变量,如“movie_name”或“rating”或“release_year”,并且给定该变量,我必须访问该结构的相应元素。

例如:如果输入文件读取“movie_name”,那么我想访问movie.movi​​e_name。我怎么做没有制作4个if语句?还有另外一种方法吗?

if(input == "movie_name")
   movie.movie_name = ... 
else if(input == "rating")
   movie.rating = ... 

我正在使用的真正结构有20多个成员,所以我试图找到一种更有效的方法来编写这段代码。

提前致谢!

2 个答案:

答案 0 :(得分:0)

在C / C ++中,不可能使用字符串访问变量;所以使用你提供的结构无法做到这一点。地图可能是另一种选择:

map<string, int>

但随后每个变量将映射到相同类型的变量(在本例中为int)...您应该查看相关问题:How to use a string as a variable name in C++?Convert string to variable name or variable type

答案 1 :(得分:0)

您正在寻找的是反射。遗憾的是,C ++不支持它。解决问题的一个解决方案当然不是最佳解决方案,那就是将结构实现为map的{​​{1}},如下所示:

pair<key,value>

然而,问题是ValueType。如果可以使用boost,那么这可能是更好的解决方案:

struct movie {
   std::map<string,ValueType> foo;
}