json2jsoncpp 关键代码分析1
j2jc有个高级功能就是实现从一个json字符串自动生成对象的功能
她主要是通过一个做一个map,实现类名字符串对应new对象的函数,通过字符串调用相对应的new类的函数(见string2object.h)
string2object.h
protected:typedef string2object* (*newobjfun)();private:static handlelock x;static FAST_MAP<std::string,newobjfun> n2o;public:static bool REG(std::string name,newobjfun fun){lock(x);if(n2o[name]){unlock(x);return false;}else{n2o[name]=fun;unlock(x);return true;}}
REG函数就是把一个类名字符串与一个 string2object* newobjfun函数关联起来
这个函数类似这样:
string2object* newfun() {return CLASS1; }
而CLASS1又是继承string2object的
class CLASS1:public string2object {//... }
所以,当调用:
string2object * p=string2object::NEW("CLASS1");
这时候会调用之前注册的时候注册的new地址
string2object.h
static string2object * NEW(std::string name){lock(x);newobjfun retval=n2o[name];unlock(x);if(!retval){return 0;}return retval();}
这样就会得到CLASS1的对象指针
后面的事情就比较简单了,
可以做decode调用,并且调用decodesuccess方法
这就是j2jc高级应用的基本原理,当然里面还有很多事情要处理,后面的文章将会继续分析
转载于:https://www.cnblogs.com/vanis/archive/2013/02/28/2936110.html
json2jsoncpp 关键代码分析1相关推荐
- Blog5 无监督深度关键短语生成——关键代码分析3
2021SC@SDUSC 附所有代码链接:https://github.com/Jayshen0/ Unsupervised-Deep-Keyphrase-Generatio 本篇分析代码模块为:ex ...
- ucore进程上下文切换关键代码分析
目录 进程切换关键代码 上下文切换函数定义 上下文切换函数调用 进程上下文切换整体流程 proc_run执行流程 jmp switch_to如何改变了指令控制流程 执行jmp switch_to指令时 ...
- Blog3 无监督深度关键短语生成——关键代码分析1
2021SC@SDUSC 附所有代码链接:https://github.com/Jayshen0/ Unsupervised-Deep-Keyphrase-Generatio 本篇分析代码模块为:ex ...
- <2021SC@SDUSC>博客(5)山东大学软件工程应用与实践JPress代码分析(四)
2021SC@SDUSC 前言 在前面三篇文章中,我对 JPress 项目的基础框架 JFinal 和 JBoot 在使用层面进行了拆解与分析.在接下来的文章中,我将在代码层面对 JPress 项目中 ...
- vin-slam中调用ceres库内部代码分析与性能优化
vin-slam中调用ceres库内部代码分析与性能优化 1,vin-slam中后端参数优化调用流程代码 2,ceres内部的求解流程(未完待续) 首先,很抱歉前几次上传的关于一些图像算法代码不全,主 ...
- Miari部分代码分析
关于Mirai僵尸病毒攻击分析报告 前言 2016年10月21日,美国东海岸地区遭受大面积网络瘫痪,其原因为美国知名域名解析服务提供商DYN公司当天受到强力的DDoS攻击.该厂商为Github.Twi ...
- 【Windows 逆向】OD 调试器工具 ( 分析 OD 硬件断点处的关键代码 | 添加硬件断点 | 关键代码 | MOV 指令 | EAX 寄存器值分析 | 使用命令查看 esi+0cc 地址 )
文章目录 一.添加硬件断点 二.关键代码 三.MOV 汇编指令格式 四.EAX 寄存器值分析 五.使用命令查看 esi+0cc 地址 一.添加硬件断点 在上一篇博客中 , 在子弹个数数据内存地址 07 ...
- 【直播回顾】云栖社区特邀专家关键:Java无锁集合代码分析
主讲人:关键(云栖社区特邀专家) 目前在广州某家知名公司任职架构师,主要负责Spring Cloud.Dubbo.MQ.Zookeeper的规划. 平时比较热衷于研究互联网技术,热爱生活,希望能结交到 ...
- 编写程序描述影视歌三栖艺人 需求说明:请使用面向对象的思想,设计自定义类,描述影视歌三梄艺人。 实现思路及关键代码 1)分析影视歌三栖艺人的特性 a)可以演电影 b)可以演电视剧 c)可以唱歌
编写程序描述影视歌三栖艺人 需求说明:请使用面向对象的思想,设计自定义类,描述影视歌三梄艺人. 实现思路及关键代码 1)分析影视歌三栖艺人的特性 a)可以演电影 b)可以演电视剧 c)可以唱歌 2)定 ...
最新文章
- SLF4j+LOG4j
- linux 命令:ls命令
- 数据结构:单向链表的反转
- 加快发展设施业 农业大健康-林裕豪:从玉农业践行基础支撑
- SAP UI5 应用开发教程之十四 - 嵌入视图的使用方式
- 【图论】【最短路】【SPFA】【USACO题库】2.4.4 Bessie Come Home回家(jzoj 1274)
- 前端html,css基础总结
- hdu2553N皇后问题(打表)
- 数学建模论文书写总结
- 联想拯救者Legion Y7000P 2020款ubuntu20.04安装ros noetic与bloom-generate打包ros noetic为deb软件包
- 你有没有见过5GB大小的图片?
- 零基础学DevOps必看教程,带你10分钟快速实战入门DevOps
- c语言 重新输入,C语言函数重新输入
- “%,/,//”的用法
- 时间序列中的平稳性检验之单位根检验
- PHP 5.5从零开始学 视频教学版pdf
- 36 岁捧走图灵碗!80 岁算法大师高德纳要在 105 岁完结《计算机程序设计艺术》...
- 亚马逊、沃尔玛卖家自养号退款经验和测评技术
- 益和VA 虚拟化应用稳定性深度体验
- Ceium调用3dsmax模型
热门文章
- Linux whoami指令
- JVM并行收集器ParNew、Parallel相关参数
- synchronized的可重入怎么实现的
- html解析的简单方式,HTML解析看我就够了,不依赖任何第三方,两个方法搞定
- dsc linux 软件安装_linux – 安装dsc21时出错:“dsc21:取决于:cassandra(= 2.1.8),但要安装2.2.0”...
- Windows10 编译 Open3D 时出现 error C2220: 以下警告被视为错误 (编译源文件
- 2.1.1 物理层接口特性、数据通信模型、物理层基本概念(数据、信号、码元 、信源、信道、信宿 、速率、波特、带宽)
- mysql not in语句_Mysql学习经验总结【2】
- 为什么要进行字节对齐?
- javascript / DOM、BOM、document、window 区别和联系