使用用户变量访问结构的成员?C++

Using a user variable to access a member of struct? C++

本文关键字:成员 C++ 结构 访问 用户 变量      更新时间:2023-10-16

假设我有以下结构:

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+ 个成员,所以我正在尝试找到一种更有效的方法来编写此代码。

提前感谢!

> 在 C/C++ 中,不可能使用字符串访问变量;因此无法使用您提供的结构来执行此操作。地图可能是一种替代方法:

map<string, int>

但是随后每个变量将映射到相同类型的变量(在本例中为 int)...您应该查看相关问题:如何在C++中使用字符串作为变量名?和 将字符串转换为变量名或变量类型

你正在寻找的叫做反射。 不幸的是,C++不支持它。当然,解决您的问题的一种解决方案不是最佳解决方案,那就是将您的结构实现为map pair<key,value>如下所示:

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

但是,问题在于值类型。如果 boost 可用,那么这可能是一个更好的解决方案:

struct movie {
   std::map<string,boost::variant<typeX, typeY>> foo;
}