说我有以下结构:
struct movie {
char movie_name[32];
int rating;
int release_year;
char location;
}
通常情况下,我会通过说“movie.rating”来获得评分。
对于这个项目,我必须从文本文件中获取输入。我将从文件中读取一个变量,如“movie_name”或“rating”或“release_year”,并且给定该变量,我必须访问该结构的相应元素。
例如:如果输入文件读取“movie_name”,那么我想访问movie.movie_name。我怎么做没有制作4个if语句?还有另外一种方法吗?
if(input == "movie_name")
movie.movie_name = ...
else if(input == "rating")
movie.rating = ...
我正在使用的真正结构有20多个成员,所以我试图找到一种更有效的方法来编写这段代码。
提前致谢!
答案 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;
}