如果我们在 C++ 中有这个:
typedef enum {Unknown,USA,Canada,France,England,Italy,Spain,Australia,} origin_t;
origin_t Country;
char *current;
cin>>current;
我们如何设置Country
为用户输入的 c-String current
?因为我们有一个很大的列表,所以除了一个一个比较?最快的方法?非常感谢您。
C++ 中的enum
and string
or之间没有直接的转换,就像在 Java 中一样。char*
一种有效的方法是拥有一张地图:
#include <map>
#include <string>
typedef enum {Unknown,USA,Canada,France,England,Italy,Spain,Australia,} origin_t;
std::map<std::string, origin_t> countries;
countries["Unknown"] = Unknown;
countries["USA"] = USA;
//...
origin_t Country;
std::string current;
cin>>current;
Country = countries[current];
请注意,在我的示例中,我使用std::string
的char*
是 ,除非您有充分的理由使用 ,否则您应该这样做char*
。
我使用的是一组 POD 结构。该结构包含与特定枚举对应的字符的枚举和 const char *。然后我使用 std::find 来查找 enum 或 char * 取决于需要哪个。
POD 数组的优点是一切都在程序加载时初始化。无需加载地图。
缺点是 std::find 的线性搜索。但这从来都不是问题,因为我从来没有大量的枚举值。
以上都隐藏在实现文件中。标题只有功能。通常一个从枚举转换为 std::string,另一个从 std::string 转换为枚举。