首頁 >後端開發 >C++ >如何有效地將 C 枚舉映射到字串?

如何有效地將 C 枚舉映射到字串?

Mary-Kate Olsen
Mary-Kate Olsen原創
2024-12-10 01:22:12541瀏覽

How to Efficiently Map C   Enums to Strings?

如何輕鬆地將C 枚舉映射到字串

當使用第三方庫頭中定義的枚舉時,有必要建立一種將枚舉值轉換為使用者的機制- 定義的字串,反之亦然。

標準方法

一種簡單的方法涉及創建一系列函數:

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];

此方法提供了乾淨且高效的映射機制。

map_init Helper Class

為了語法方便,可以使用以下幫助器類別:

template<typename T> struct map_init_helper
{
    map_init_helper(T&amp; d) : data(d) {}
    T&amp; data;
    map_init_helper&amp; operator() (typename T::key_type const&amp; key, typename T::mapped_type const&amp; value)
    {
        data[key] = value;
        return *this;
    }
};

template<typename T> map_init_helper<T> map_init(T&amp; 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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn