nlohmann/json——NLOHMANN_JSON_SERIALIZE_ENUM
目录
源码如下:
源码分析:
使用示例:
源码如下:
/*!
@brief macro to briefly define a mapping between an enum and JSON
@def NLOHMANN_JSON_SERIALIZE_ENUM
@since version 3.4.0
*/
#define NLOHMANN_JSON_SERIALIZE_ENUM(ENUM_TYPE, ...) \template<typename BasicJsonType> \inline void to_json(BasicJsonType& j, const ENUM_TYPE& e) \{ \static_assert(std::is_enum<ENUM_TYPE>::value, #ENUM_TYPE " must be an enum!"); \static const std::pair<ENUM_TYPE, BasicJsonType> m[] = __VA_ARGS__; \auto it = std::find_if(std::begin(m), std::end(m), \[e](const std::pair<ENUM_TYPE, BasicJsonType>& ej_pair) -> bool \{ \return ej_pair.first == e; \}); \j = ((it != std::end(m)) ? it : std::begin(m))->second; \} \template<typename BasicJsonType> \inline void from_json(const BasicJsonType& j, ENUM_TYPE& e) \{ \static_assert(std::is_enum<ENUM_TYPE>::value, #ENUM_TYPE " must be an enum!"); \static const std::pair<ENUM_TYPE, BasicJsonType> m[] = __VA_ARGS__; \auto it = std::find_if(std::begin(m), std::end(m), \[&j](const std::pair<ENUM_TYPE, BasicJsonType>& ej_pair) -> bool \{ \return ej_pair.second == j; \}); \e = ((it != std::end(m)) ? it : std::begin(m))->first; \}
源码分析:
从注释看,NLOHMANN_JSON_SERIALIZE_ENUM宏是将用户定义的枚举类型与JSON进行映射。其实际上是定义了两个模板函数,to_json和from_json,宏的第一个参数ENUM_TYPE是用户定义的枚举类型,后面携带了可变参数,即...符号。
// asset检查,看ENUM_TYPE是否是枚举,其中#符号为宏中的特殊运算符,在预编译时期,用于将宏参数转换为字符串
static_assert(std::is_enum<ENUM_TYPE>::value, #ENUM_TYPE " must be an enum!");
// __VA_ARGS__为系统自定义变量,指向宏中的可变参数
static const std::pair<ENUM_TYPE, BasicJsonType> m[] = __VA_ARGS__;
// 在可变参数指定的map中查找
auto it = std::find_if(std::begin(m), std::end(m),
[e](const std::pair<ENUM_TYPE, BasicJsonType>& ej_pair) -> bool
{
return ej_pair.first == e;
});
j = ((it != std::end(m)) ? it : std::begin(m))->second;
使用示例:
enum class Type
{kType1 = 0,kType2 = 1,kType3 = 2,kType4 = 3,kType5 = 4
};NLOHMANN_JSON_SERIALIZE_ENUM(Type, {{Type::kType1, nullptr},{Type::kType2, "stopped"},{Type::kType3, "running"},{Type::kType4, "completed"},{Type::kType5, "completed"},
});int main(int argc, char *argv[])
{Type t = Type::kType4;nlohmann::json j = t;std::cout << "dump:" << j.dump() << std::endl;return 0;
}
运行结果如下:
dump:"completed"
相关文章:
![](https://www.ngui.cc/images/no-images.jpg)
nlohmann/json——NLOHMANN_JSON_SERIALIZE_ENUM
目录 源码如下: 源码分析: 使用示例: 源码如下: /*! brief macro to briefly define a mapping between an enum and JSON def NLOHMANN_JSON_SERIALIZE_ENUM since version 3.4.0 */ #define NLOHMANN_JSON_SERIALIZE_ENUM(EN…...
![](https://img-blog.csdnimg.cn/25d6b8bede3c423a96e705685b4b2d72.png)
类和对象:运算符重载
本篇文章来介绍一下C中的运算符重载,以及与运算符重载有关的三个默认默认成员函数:赋值运算符重载,普通对象取地址与const对象取地址操作符重载,也就是下面图片中6个默认成员函数的后三个,前三个默认成员函数在之前文章…...
![](https://img-blog.csdnimg.cn/c76e3db02a9c4cde9ca7e163ea041b5f.png)
Vue中使用VueAMap
npm 安装 npm install vue-amap --save注册:高德地图 // 在main.js中注册:高德地图 import VueAMap from "vue-amap"; Vue.use(VueAMap); VueAMap.initAMapApiLoader({key: "你的高德key",plugin: ["AMap.AutoComplete", //输入提示插件"A…...
![](https://img-blog.csdnimg.cn/0998d377250e48c4b1343193213909a1.gif)
Vue中的路由介绍以及Node.js的使用
🏅我是默,一个在CSDN分享笔记的博主。📚📚 🌟在这里,我要推荐给大家我的专栏《Vue》。🎯🎯 🚀无论你是编程小白,还是有一定基础的程序员,这个专栏…...
![](https://img-blog.csdnimg.cn/67e99bca6db24b379b235c928d6b8e06.png#pic_center)
将本地项目上传至Github详解
目录 1 前言2 本地代码上传2.1 命令行方法2.2 图形界面法2.3 结果 1 前言 GitHub是一个面向开源及私有软件项目的托管平台,因为只支持Git作为唯一的版本库格式进行托管,故名GitHub 。开发者常常将github作为代码管理平台,方便代码存储、版本…...
![](https://img-blog.csdnimg.cn/280daac4c43a441cbbb173019b6b9567.png)
Vivado下PLL实验
文章目录 前言一、CMT(时钟管理单元)1、CMT 简介2、FPGA CMT 框图3、MMCM 框图4、PLL 框图 二、创建工程1、创建工程2、PLL IP 核配置3、进行例化 三、进行仿真1、创建仿真文件2、进行仿真设置3、进行行为级仿真 四、硬件验证1、引脚绑定2、生成比特流文…...
![](https://img-blog.csdnimg.cn/2c314b11f7b047429e4db48c73d8cf84.png#pic_center)
简单理解推挽输出和开漏输出
推挽输出原理图: 特点: 1、INT1时,OUTVDD;INT0时,OUTGND。 2、推挽输出的两种输出状态,一种是PMOS管S级端的电压VDD,一种是NMOS管S端的地GND。 开漏输出原理图: 特点: …...
![](https://img-blog.csdnimg.cn/20190106163945739.jpg#pic_center)
C++之va_start、vasprintf、va_end应用总结(二百二十六)
简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长! 优质专栏:Audio工程师进阶系列【原创干货持续更新中……】🚀 人生格言: 人生…...
![](https://www.ngui.cc/images/no-images.jpg)
OpenCV自学笔记十一:形态学操作(一)
目录 1、腐蚀 2、膨胀 3、通用形态学函数 4、开运算 5、闭运算 1、腐蚀 腐蚀(Erosion)是数字图像处理中的一种形态学操作,用于消除图像中边界附近的细小区域或缩小对象的大小。腐蚀操作通过卷积输入图像与结构元素(也称为腐…...
![](https://img-blog.csdnimg.cn/9bbc18352bfc49e0a00e5cb1901b5b39.png)
封装全局异常处理
文章目录 1 定义错误码类2 定义业务异常类3 全局异常处理器4 使用5 前端请求效果总结 1 定义错误码类 可以定义各种错误码枚举,比如业务,系统相关的报错信息 /*** 错误代码* 错误码** author leovany* date 2023/09/23*/ public enum ErrorCode {SU…...
![](https://img-blog.csdnimg.cn/f843c1a681a644e69cc5be6723c52d24.png)
python的requests响应请求,结果乱码,即使设置了response.encoding也没有用的解决方法
一、问题 如图: 一般出现乱码,我们会有三种解决方式,如下但是图中解决了发现还是不行, response.encodingresponse.apparent_encoding通过看网页源码对response.encodingutf8指定编码格式或者直接通过response.content.decode()来获得源码 出…...
![](https://img-blog.csdnimg.cn/5506990d11794e67ba8c6054f8b0d9f9.png)
PyCharm 手动下载插件
插件模块一直加载失败,报错信息: Marketplace plugins are not loaded. Check the internet connection and refresh. 尝试了以下方法,均告失败: pip 换源Manage Plugin Repositories...HTTP 代理设置...关闭三个防火墙 最后选…...
![](https://img-blog.csdnimg.cn/abf43247452e4251bdf0981d24349a91.png)
Gnomon绑定基础(约束 IK 节点)
点约束 方向约束 父约束 目标约束 修改后 对象方向 IK控制柄 直的骨骼,指定IK怎么弯曲 直的骨骼,指定IK怎么弯曲 样条曲线 数学节点 乘除节点 混合节点 注意...
![](https://img-blog.csdnimg.cn/9bd2b575066a40f7b9f7e8619b9d3732.png)
STL常用遍历,查找,算法
目录 1.遍历算法 1.1for_earch 1.2transform 2.常用查找算法 2.1find,返回值是迭代器 2.1.1查找内置数据类型 2.1.2查找自定义数据类型 2.2fin_if 按条件查找元素 2.2.1查找内置的数据类型 2.2.2查找内置数据类型 2.3查找相邻元素adjeacent_find 2.4查找指…...
![](https://www.ngui.cc/images/no-images.jpg)
BCC源码内容概览(1)
接前一篇文章:BCC源码编译和安装 本文参考官网中的Contents部分的介绍。 BCC源码根目录的文件,其中一些是同时包含C和Python的单个文件,另一些是.c和.py的成对文件,还有一些是目录。 跟踪(Tracing) exam…...
![](https://img-blog.csdnimg.cn/1ccea9bb2cfb4c8b8793e52f1401e571.png)
mysql限制用户登录失败次数,限制时间
mysql用户登录限制设置 mysql 需要进行用户登录次数限制,当使用密码登录超过 3 次认证链接失败之后,登录锁住一段时间,禁止登录这里使用的 mysql: 8.1.0 这种方式不用重启数据库. 配置: 首先进入到 mysql 命令行:然后需要安装两个插件: 在 mysql 命令行中执行: mysql> INS…...
![](https://www.ngui.cc/images/no-images.jpg)
从利用Arthas排查线上Fastjson问题到Java动态字节码技术(下)
上一篇从Arthas的源码引出了Java动态字节码技术,那么这一篇就从几种Java字节码技术出发,看看Arthas是如何通过动态字节码技术做到无侵入的源码增强; Java大部分情况下都是解释执行的,也就是解释.class文件,所以如果我们…...
![](https://img-blog.csdnimg.cn/a1179c1aff124843b9df1cd077a0c7c3.png)
Ubuntu中安装Anaconda 如何将 路径导入为全局变量
第一步:将你的anaconda 路径复制下来,在终端输入对应路径。 echo export PATH"/home/你的用户名/anaconda3/bin:$PATH" >> ~/.bashrc 第二步:在终端输入下面命令或者重启系统。 source ~/.bashrc 在对应的anaconda安装目…...
![](https://img-blog.csdnimg.cn/977a1e49aeba4ae697afaab348796da1.png)
【QT】Qt的随身笔记(持续更新...)
目录 Qt 获取当前电脑桌面的路径Qt 获取当前程序运行路径Qt 创建新的文本文件txt,并写入内容如何向QPlainTextEdit 写入内容QTimerQMessageBox的使用QLatin1StringQLayoutC在c头文件中写#include类的头文件与直接写class加类名有何区别mutable关键字前向声明 QFontQ…...
![](https://img-blog.csdnimg.cn/d660272ee9c1441dbf704ff352be2592.png)
【LeetCode-简单题】589. N 叉树的前序遍历
文章目录 题目方法一:单循环栈做法方法二:递归 题目 方法一:单循环栈做法 关键在于子节点的入栈顺序,决定了子节点的出栈顺序, 因为是前序遍历 所以压栈顺序先让右边的入栈 依次往左 这样左边的节点会在栈顶 这样下次…...
![](https://www.ngui.cc/images/no-images.jpg)
Linphone3.5.2 ARM RV1109音视频对讲开发记录
Linphone3.5.2 ARM RV1109音视频对讲开发记录 说明 这是一份事后记录,主要记录的几个核心关键点,有可能很多细节没有记上,主要是方便后面自己再找回来! 版本 3.5.2 一些原因选的是这样一个旧的版本! 新的开发最好选新一些的版…...
![](https://img-blog.csdnimg.cn/a3c7e5aebb2b4439a625503333efd43a.gif)
Unity用相机实现的镜子效果
首先登场 场景中的元素 mirror是镜子,挂着我们的脚本,Quad是一个面片。Camera是用来生成RenderTexture给面片的。里面的test1是我用来调试位置的球。 镜子size是大小,x是-2,为了反转一下贴图 相机直接可以禁用掉,用…...
![](https://img-blog.csdnimg.cn/f69c5daaa74f4ea3bb4f689ae26eec32.png)
计算机网络分类
按照覆盖范围分类 (1)个域网:通常覆盖范围在1~10m。 (2)局域网:通常覆盖范围在10m~1km。 (3)城域网:覆盖范围通常在5~50 km 。 &…...
![](https://img-blog.csdnimg.cn/8a17f9fda76241ffa192541f6fe84b69.png)
AI AIgents时代 - (三.) AutoGPT和AgentGPT
前两篇讲解了Agent的原理和组件,这节我将给大家介绍两个agent项目,给出它们的工作原理和区别,并教大家亲手尝试使用 Agents🎉 🟢 AutoGPT🤖️ 我们的老朋友,之前文章也专门写过。AutoGPT 是一…...
![](https://www.ngui.cc/images/no-images.jpg)
Jmeter接口自动化和Python接口自动化,如何选择?
选择Jmeter或Python进行接口自动化测试取决于您的具体需求和环境。以下是一些可以考虑的因素: 1. 语言熟悉度:如果您对Java更熟悉,那么Jmeter可能是更好的选择。而如果您的团队或个人对Python更熟悉,那么Python可能是更好的选择。…...
![](https://img-blog.csdnimg.cn/8bcb66a90de54d0bba412f6bd78957c0.jpeg)
Sqilte3初步教程
文章目录 安装创建数据库创建和删除表插入行数据 安装 Windows下安装,首先到下载页面,下载Windows安装软件,一般是 sqlite-dll-win32-*.zip sqlite-tools-win32-*.zip下载之后将其内容解压到同一个文件夹下,我把它们都放在了D:\…...
![](https://www.ngui.cc/images/no-images.jpg)
详解Python中的json库
目录 1. json简介2. dumps/loads3. dump/load4. jsonl格式 1. json简介 JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,用于在不同应用程序之间传递数据。它是一种文本格式,易于阅读和编写,同时也易于…...
![](https://img-blog.csdnimg.cn/1dc18125f7b446d792f094e1998eebe7.png)
【Spring Boot】Spring Boot源码解读与原理剖析
这里写目录标题 前言精进Spring Boot首选读物“小册”变“大书”,彻底弄懂Spring Boot全方位配套资源,学不会来找我!技术新赛道,2023领先抢跑 前言 承载着作者的厚望,掘金爆火小册同名读物《Spring Boot源码解读与原理…...
![](https://www.ngui.cc/images/no-images.jpg)
C++学习(1)
一、C概述(了解) C在C语言的基础上添加了面向对象编程和泛型编程的支持 二、helloword程序(掌握) #define _CET_SECURE_NO_WARNINGS//在开发软件visual studio编译 c文件时, visual studio认为strcpy,scanf等函数不安全的导致报…...
![](https://img-blog.csdnimg.cn/72f3e91ea56e4661960335e2ce4cbe02.png)
机器人如何有效采摘苹果?
摘要:本文利用动捕数据构建拟人运动模型,对比观察两种苹果采摘模式,并对系统性能进行全面评估,为提高机器人采摘效率提供创新方法。 近期,一项关于苹果采摘机器人的有趣研究—— "Design and evaluation of a rob…...
![](https://img2018.cnblogs.com/blog/1244272/201907/1244272-20190721190405648-1686002653.png)
聊城网站制作公司电话/苏州seo怎么做
1.重载操作符返回*this 2.返回类成员变量的引用,最好加const,不破坏类成员的封装性 如下:复制于 C 中引用有什么用? - 谢之易的回答 - 知乎 https://www.zhihu.com/question/34267829/answer/58414818 转载于:https://www.cnblogs…...
![](/images/no-images.jpg)
云浮东莞网站建设/十大管理培训课程
Example: h waitbar(0,Please wait...); for i1:1000, % computation here % waitbar(i/1000,h) end 程序未验证,摘抄自:http://www.ilovematlab.cn/thread-203937-1-1.html...
有哪些可以接单做任务的网站/深圳网站提升排名
前言 有的时候,配置信息是我们无法在开发过程中就能确定的。比如,给客户开发的项目,客户需要根据自身的情况自定义配置,如数据库配置,加密密钥配置等等。这时候,就需要把配置文件放在外面,让用户…...
![](https://img-blog.csdnimg.cn/20200406165543315.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzI0ODE1NjE1,size_16,color_FFFFFF,t_70)
ps如何做游戏模板下载网站/网络营销策划书范文模板
以前也在ubuntu上面安装过搜狗输入法,没有记录详细的安装步骤,这次详细的记录下。 1.在系统设置里安装中文语言支持 2.安装fcitx,并设置input method sudo apt-get install fcitx 3.下载搜狗输入法安装包linux版本 网站 安装完以后要重启电…...
![](https://images2018.cnblogs.com/blog/1356841/201804/1356841-20180412215334956-2017904630.png)
新加坡网站制作/竞价是什么工作
1.需要实现的功能 在一个文件里储存多个用户的个人信息,包含用户名、用户密码、年龄、职位、部门、手机号,用户数据结构如下:yc,mima1234,25,master,biology,18771013309 jack,ycccycu,28,ceo,it,1312312314 rose,sad21312,23,model,art,2132…...
![](/images/no-images.jpg)
系统开发报价/贵阳网站优化公司
一、运行期类型与编译期类型 1.第一种情况:编译期类型和运行期类型相同: 声明A的时候,使用到的类型A表示对象的类型,被称为编译期类型,在编译期,虚拟机认为a的类型是A,对于a所使用的属性和方法的有效性将到…...