简易实现枚举类型到字符串

news/2025/12/7 23:47:52/文章来源:https://www.cnblogs.com/czw-yibao/p/19319156
#include <array>
#include <string>
#include <utility>
#include <string_view>template <typename E, E V>
constexpr auto PrettyName()
{std::string_view name{__PRETTY_FUNCTION__, sizeof(__PRETTY_FUNCTION__) - 2};name.remove_prefix(name.find_last_of(" ") + 1);if (name.front() == '(') name.remove_prefix(name.size());return name;
}template <typename E, E V>
constexpr bool IsValidEnum()
{return !PrettyName<E, V>().empty();
}template <int... Seq>
constexpr auto MakeIntegerSequence(std::integer_sequence<int, Seq...>)
{return std::integer_sequence<int, (Seq)...>();
}constexpr auto NormalIntegerSequence = MakeIntegerSequence(std::make_integer_sequence<int, 32>());template <typename E, int... Seq>
constexpr size_t GetEnumSize(std::integer_sequence<int, Seq...>)
{constexpr std::array<bool, sizeof...(Seq)> valid{IsValidEnum<E, static_cast<E>(Seq)>()...};constexpr std::size_t count = [](decltype((valid)) v) constexpr noexcept->std::size_t{auto cnt = std::size_t{0};for (auto b : v) if (b) ++cnt;return cnt;}(valid);return count;
}template <typename E, int... Seq>
constexpr auto GetAllValidValues(std::integer_sequence<int, Seq...>)
{constexpr std::size_t count = sizeof...(Seq);constexpr std::array<bool, count> valid{IsValidEnum<E, static_cast<E>(Seq)>()...};constexpr std::array<int, count> seq{Seq...};std::array<int, GetEnumSize<E>(NormalIntegerSequence)> values{};for (std::size_t i = 0, v = 0; i < count; ++i) if (valid[i]) values[v++] = seq[i];return values;
}template <typename E, int... Seq>
constexpr auto GetAllValidNames(std::integer_sequence<int, Seq...>)
{constexpr std::array<std::string_view, sizeof...(Seq)> names{PrettyName<E, static_cast<E>(Seq)>()...};std::array<std::string_view, GetEnumSize<E>(NormalIntegerSequence)> validNames{};for (std::size_t i = 0, v = 0; i < names.size(); ++i) if (!names[i].empty()) validNames[v++] = names[i];return validNames;
}template <typename E>
constexpr std::string_view Enum2String(E V)
{constexpr auto names = GetAllValidNames<E>(NormalIntegerSequence);constexpr auto values = GetAllValidValues<E>(NormalIntegerSequence);constexpr auto size = GetEnumSize<E>(NormalIntegerSequence);for (size_t i = 0; i < size; ++i) if (static_cast<int>(V) == values[i]) return names[i];return std::to_string(static_cast<int>(V));
}

  

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/991918.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SGLang 的 TP 模式浅析 - -银光

SGLang 的 TP 模式浅析本文已于 2025.09.21 发表于知乎和公众号。1. 简介在前序笔记中总结了SGLang 的各种分布式集群模式,本文将进一步总结 TP 模式。TP 模式将模型中的权重张量按行或者列拆分到单机或者多机的多个 …

用 GOGC 和 GOMEMLIMIT 控制 Go 程序内存:让区块链节点不再 OOM - 若

很多区块链节点(如 Ethereum Geth、Arbitrum Nitro、Erigon 等)都是用 Go 语言编写的。运行时间一长,经常会遇到一个问题:内存不断上涨,最后容器被 OOM Kill,节点重启,同步中断。其实这个问题,Go 官方早就给了…

python题库 No.29 分类一下吧!

困难级城市大分类,请将城市(列表cities)按照省份分类,将分类好的保存为字典,字典的键为列表province的元素,字典的值为列表cities的值。 最后输出分类好的字典。 输出示例:{四川: [四川成都, 四川泸州, 四川雅安…

iReader 英语点读学习系统,译林小学英语在线点读

英语在线点读系统 一个在线点读系统,将资源和播放系统分开,外挂资源实现英语在线点读学习。 可以自己制作自己需要的学习资源,通过外挂资源的模式实现在线点读学习。 信息 Demo: https://tap.ichochy.com Blog:htt…

2025年下半年上海ISO27001认证公司综合评测与选择指南

摘要 随着数字化转型加速,ISO27001信息安全管理体系认证在上海企业中的需求持续增长,2025年下半年行业预计迎来高峰。本文基于第三方调研数据,对上海地区ISO27001认证服务商进行客观排名,并提供详细评测。表单数据…

2025年下半年上海IATF16949认证服务权威推荐与专业指南

摘要 随着汽车行业供应链要求的不断提升,IATF16949认证已成为汽车零部件企业必备的质量管理体系认证。2025年下半年,上海地区认证服务市场呈现专业化、定制化发展趋势,本文基于行业数据和服务能力评估,为您推荐五家…

2025年下半年上海ISO三体系认证服务商综合评估与权威推荐

摘要 随着2025年ISO认证标准更新在即,上海地区企业对三体系认证(ISO9001、ISO14001、ISO45001)需求显著增长。本文基于市场调研数据,从技术实力、服务案例、行业口碑等维度对上海地区主流认证服务机构进行综合评估…

2025年下半年上海CE认证服务商综合评测与选择指南

摘要 随着欧盟市场准入标准的不断提高,CE认证已成为中国企业出口欧洲的必备通行证。2025年下半年,上海地区的CE认证服务市场呈现专业化、细分化的趋势,各类认证机构在服务流程、技术实力、行业经验等方面存在显著差…

2025年12月海南财税代理,海南税务合规财税,海口财税公司品牌推荐榜,彰显专业财税服务实力

2025年12月海南财税代理,大老板企业管理彰显专业实力在2025年12月的海南,财税代理与税务合规服务对于企业的稳定发展至关重要。在众多的财税公司中,大老板企业管理(海南)有限公司凭借其专业的服务实力,在海口财税…

2025年12月海南注册公司财税,海口财税,海南代理记账财税公司最新推荐,聚焦企业注册与全案财税交付能力

2025年12月海南注册公司财税新选择——大老板企业管理(海南)有限公司在2025年12月的海南,随着经济的蓬勃发展,越来越多的企业选择在这里注册成立。而在企业的发展过程中,财税问题是至关重要的一环。大老板企业管理…

ROS2概述和环境搭建

近期我们想实现一个功能,利用机器人实现羽绒服分拣。我们计划的硬件:宇树G1(移动底盘+躯干) + 灵巧手(末端执行器) + 摄像头/深度传感器(视觉)和力量传感器(触觉) 那么问题就来了?这些组件来自不同的厂商,…

solid设计原则

一. solid原则 solid设计原则是面向对象的建议性原则,包括单一职责原则、开闭原则、里氏替换原则、接口隔离原则、依赖倒置原则。 二.单一职责原则 三.开闭原则 四.里氏替换原则 五.接口隔离原则 六.依赖倒置原则

SGLang 分布式集群模式概览 - -银光

SGLang 分布式集群模式概览本文已于2025.09.14 发表于知乎和公众号。计算加速是推理系统优化的终极目标,并行计算是实现该目标的核心手段,而分布式集群则是支撑并行计算落地的底层基础设施。本文概括性的介绍 SGLang…

20232426 2025-2026-1 《网络与系统攻防技术》实验八实验报告

20232426 2025-2026-1 《网络与系统攻防技术》实验八实验报告 Web安全 一、 实验内容Web前端HTML:能安装启停Apache,编写含表单的HTML网页。 Web前端JavaScript:能用JS验证表单并回显欢迎信息,测试XSS注入。 Web后…

2025.12.7总结

今天尝试用ai生成爬取京东评论的程序,但是怎么整也不行,这反扒机制太强了,然后参考舍友的一篇博客的代码。里面有一项新的技术DrissionPage,这种是完全模拟用户行为来获取想要的数据 优点是能完美解决反爬问题,因…

20251207 新同学培训有感

今年开始给新同学进行科研培训,也是一种全新的尝试。大家的周报里反映了下面问题,我也记录一下:网课看完了,实践因为谷歌登录问题和时间关系尚未上手,课中有些新概念比较难理解,有些还涉及到线代的内容,需要提前…

2025 最新锂电池服务商 / 厂家 TOP5 评测!技术创新 + 品质保障权威榜单发布,赋能新能源产业高质量发展

随着新能源产业的蓬勃发展,锂电池作为核心能源部件,其性能与品质直接关系到下游应用的安全与效能。本榜单基于技术研发实力、行业适配能力、服务效能表现三大维度,结合市场反馈与行业数据,权威解析2025年五大锂电池…

OI 带给了我什么

观前提醒:本文有一定的负面情绪,不建议在心情不好时阅读。认真阅读了抑郁症治疗指南和支离破碎发言(七)。 我学 OI 时给自己定了个要求:不要在博客里写消极的东西。因为我认为,文章发出来一定是要给人看的。如果…

2025最新锂电池组装服务商/厂家TOP5评测!技术沉淀+定制方案权威榜单发布,赋能新能源产业升级发展

随着新能源产业的蓬勃发展,锂电池组装作为核心环节,其技术实力与服务品质直接关系到下游应用的性能与安全。本榜单基于技术研发实力、定制化服务能力、生产规模与品控体系三大维度,结合行业权威数据与客户反馈,对2…

text-embedding-3是什么?大模型Embedding技术科普

text-embedding-3是什么?大模型Embedding技术科普Embedding(嵌入向量)是现代 NLP 和 AI 系统的基础能力之一,它将文本转换为一组可计算的高维向量,用于捕捉语义关系。 随着 GPT 系列模型的升级,OpenAI 发布了全新…