当使用第三方库头中定义的枚举时,有必要建立一种将枚举值转换为用户的机制- 定义的字符串,反之亦然。
一种简单的方法涉及创建一系列函数:
enum MyEnum {VAL1, VAL2,VAL3}; String getStringFromEnum(MyEnum e) { switch e { case VAL1: return "Value 1"; case VAL2: return "Value 2"; case VAL1: return "Value 3"; default: throw Exception("Bad MyEnum"); } }
但是,这种方法缺乏优雅性,类似于 C 风格的方法。
更复杂的解决方案方法利用模板:
std::map<MyEnum, char const*> MyMap; //... MyMap.insert(std::make_pair(VAL1, "Value 1")); //... char const* enumString = MyMap[e];
此方法提供了干净且高效的映射机制。
为了语法方便,可以使用以下帮助器类:
template<typename T> struct map_init_helper { map_init_helper(T& d) : data(d) {} T& data; map_init_helper& operator() (typename T::key_type const& key, typename T::mapped_type const& value) { data[key] = value; return *this; } }; template<typename T> map_init_helper<T> map_init(T& item) { return map_init_helper<T>(item); }
使用此帮助器,映射可以按如下方式完成:
std::map<MyEnum, char const*> MyMap; map_init(MyMap) (VAL1, "Value 1") (VAL2, "Value 2") (VAL3, "Value 3");
这种简化的语法消除了对详细插入语句的需要。
以上是如何有效地将 C 枚举映射到字符串?的详细内容。更多信息请关注PHP中文网其他相关文章!