當使用第三方庫頭中定義的枚舉時,有必要建立一種將枚舉值轉換為使用者的機制- 定義的字串,反之亦然。
一種簡單的方法涉及創建一系列函數:
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中文網其他相關文章!