如何在C++中通过变量拼接生成正确的变量引用?
解决C++中通过变量动态引用结构体实例的问题
你想通过变量itemNo的值动态访问item1、item2、item3这类结构体实例的name成员,但C++作为静态类型语言,不支持直接通过拼接变量名的方式访问对象。以下是几种可行的实现方案:
使用数组存储结构体实例
这是最简洁高效的方式,将所有结构体实例存入数组,通过索引直接访问:#include <iostream> #include <string> struct Item { std::string name; // 可添加其他成员变量 }; int main() { Item items[] = {{"物品1名称"}, {"物品2名称"}, {"物品3名称"}}; int itemNo = 1; // 用户选择的编号,注意数组索引从0开始,需做减1处理 std::cout << "你选择的物品是 " << items[itemNo - 1].name << std::endl; return 0; }使用std::map建立编号与实例的映射
如果编号不连续或需要更灵活的键值对应关系,可采用map存储:#include <iostream> #include <string> #include <map> struct Item { std::string name; }; int main() { std::map<int, Item> itemMap = { {1, {"物品1名称"}}, {2, {"物品2名称"}}, {3, {"物品3名称"}} }; int itemNo = 2; std::cout << "你选择的物品是 " << itemMap[itemNo].name << std::endl; return 0; }使用switch-case分支处理(适合实例数量少的场景)
若结构体实例数量不多,也可以通过分支语句逐个匹配:#include <iostream> #include <string> struct Item { std::string name; }; int main() { Item item1 = {"物品1名称"}; Item item2 = {"物品2名称"}; Item item3 = {"物品3名称"}; int itemNo = 3; std::string selectedName = "无效的物品编号"; switch(itemNo) { case 1: selectedName = item1.name; break; case 2: selectedName = item2.name; break; case 3: selectedName = item3.name; break; } std::cout << "你选择的物品是 " << selectedName << std::endl; return 0; }
内容的提问来源于stack exchange,提问作者Chris Ingham
相关产品推荐
相关产品推荐

