サードパーティのライブラリ ヘッダーで定義された列挙型を利用する場合、列挙型の値をユーザーに変換するメカニズムを確立する必要があります。 -定義された文字列、またはその逆。
単純なアプローチには、一連の関数の作成が含まれます。
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); }</p> <p>このヘルパーを使用すると、マッピングは次のように実行できます:</p> <pre class="brush:php;toolbar:false">std::map<MyEnum, char const*> MyMap; map_init(MyMap) (VAL1, "Value 1") (VAL2, "Value 2") (VAL3, "Value 3");
この簡素化された構文により、冗長な挿入ステートメントが不要になります。
以上がC の列挙型を文字列に効率的にマップするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。