gpt4 book ai didi

c++ - 枚举作为参数返回字符串

转载 作者:太空狗 更新时间:2023-10-29 20:46:05 25 4
gpt4 key购买 nike

我当前的程序使用了 3 个不同的枚举:

enum ThingEnum{
Thing1 = 0,
Thing2 = 1,
Thing3 = 2,
OtherThing = 3
};
enum ReturnEnum {
Success = 4,// the method did what it is supposed to
Error1 = 5,// an error occured
Error2 = 6,// an error occured
Error3 = 7,// an error occured
Error4 = 8,// a fatal error occured program must terminate
Pointer = 9// the method may need to be called again
};
enum TypeEnum {
Type1 = 10,
Type2 = 11,
Type3 = 12,
Type4 = 13,
OtherType = 14
};

我想做的是创建一个全局函数,它接受一个枚举并返回一个字符串(因为枚举的值实际上只是一个始终有值的专用变量名)。 是否可以创建一个采用通用枚举的函数?例如

string enumToString (enum _enum){}

或者我必须为每个不同的枚举创建一个函数吗?只是一个可能的想法,我做了一些阅读,一些编译器允许 Enum 解析为 int,所以我可以将 enum 作为 int 传递,然后使用它吗?

最佳答案

“ToString-like”函数实现有两种选择:

  1. 实现一个简单的静态 switch-case 函数。

代码:

std::string ThingEnumToString(ThingEnum thing)
{
switch (thing) {
case Thing1:
return std::string("Thing1");
case Thing2:
return std::string("Thing2");
case Thing3:
return std::string("Thing3");
case OtherThing:
return std::string("OtherThing");
default:
throw std::invalid_argument("thing");
break;
}
}
  1. 通过字典查找实现静态函数。

代码:

typedef std::map<ThingEnum, std::string> ThingsMap;

static ThingsMap GetThingsMap()
{
ThingsMap things_map;
things_map.insert(ThingsMap::value_type(Thing1, std::string("Thing1")));
things_map.insert(ThingsMap::value_type(Thing2, std::string("Thing2")));
things_map.insert(ThingsMap::value_type(Thing3, std::string("Thing3")));
things_map.insert(ThingsMap::value_type(OtherThing, std::string("OtherThing")));
return things_map;
}

static std::string ThingEnumToString(ThingEnum thing)
{
static const ThingsMap things(GetThingsMap());
ThingsMap::const_iterator it = things.find(thing);
if (it != things.end()) {
return it->second;
} else {
throw std::invalid_argument("thing");
}
}

关于c++ - 枚举作为参数返回字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9111688/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com