首页 > 作文

c++11 实现枚举值到枚举名的转换问题

更新时间:2023-04-06 03:05:41 阅读: 评论:0

效果

enum_define ( color,    red,    blue,)enumhelper(co过年旅游lor::red) -> "red"enumhelper(color::red, std::toupper) -> "red"

关键技术

__va_args__

__va_args__ 实现了可变参数的宏。

#define xxx(type, ...) enum class type { __va_args__ };

xxx(color, red, blue) 等价于:

enum class color{    red,    blue};

#__va_args__

#__va_args__ 可将宏的可变参数转为字符串。

#define xxx(type, ...) #__va_args__

xxx(color, r什么是元音字母ed, blue) 等价于:"red, blue"

在函数外执行代码的能力

在函数体外,可以通过定义全局变量来执行一个函数。需要注意的是,头文件中正常是不能进行变量初始化的,除非加上 static 或者 const

const int temp = initialize();

另外,如果多个代码文件 #include 了该头文件,会产生多个变量,即在不同代码文件取得的 temp 变量不是同一个。与之对应,initialize 函数也会调用多次。

模板函数的静态变量

函数的静态变量可以用于存放枚举值到枚举字符串的映射,而将枚举类型作为模板参数的模板函数,则可以直接为每种枚举提供了一个映射容器。

关键代码

template<typename t>string enumh怎么起英文名elper(t k氧循环ey, const std::function<char(char)> processor = nullptr, const char* pszname = null){    static_asrt(std::is_enum_v<t>, __function__ "'s key need a enum");    static map<t, string> s_mapname;    if (nullptr != pszname)    {        s_mapname[key] = pszname;    }    std::string res = "";    auto it = s_mapname.find(key);    if (it != s_mapname.end())        res = it->cond;    if (nullptr != processor)        std::transform(res.begin(), res.end(), res.begin(), processor);    return res;}template <class t>size_t analystenum(t enumclass, const char* psznames)    static_asrt(std::is_enum_v<t>, __function__ "'s enumclass need a enum");    cout << "analystenum: " << psznames << endl;    if (nullptr != psznames)        const vector<string>& vecname = split(psznames, ",");        for (int i = 0; i < vecname.size(); ++i)        {            if (vecname.at(i).size() > 0)            {                enumhelper((t)(i + 1), nullptr, vecname.at(i).c_str() + (i == 0 ? 0 : 1) );            }        }        return rand();    return rand();#define enum_define(type, ...) enum class type { placeholder, __va_args__ }; static const size_t g_uenumsizeof##type = analystenum(type::placeholder, #__va_args__);

源码地址

到此这篇关于c++1欢送会主持词1实现枚举值到枚举名的转换的文章就介绍到这了,更多相关c++11枚举值到枚举名的转换内容请搜索www.887551.com以前的文章或继续浏览下面的相关文章希望大家以后多多支持www.887551.com!

本文发布于:2023-04-06 03:05:39,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/zuowen/cc39cc88bafe75824476bab997cdf7de.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

本文word下载地址:c++11 实现枚举值到枚举名的转换问题.doc

本文 PDF 下载地址:c++11 实现枚举值到枚举名的转换问题.pdf

标签:函数   变量   代码   多个
相关文章
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图