首页 > 后端开发 > C++ > 如何有效地将 C 枚举映射到字符串?

如何有效地将 C 枚举映射到字符串?

Mary-Kate Olsen
发布: 2024-12-10 01:22:12
原创
558 人浏览过

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
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板