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相关推荐

  1. Blog5 无监督深度关键短语生成——关键代码分析3

    2021SC@SDUSC 附所有代码链接:https://github.com/Jayshen0/ Unsupervised-Deep-Keyphrase-Generatio 本篇分析代码模块为:ex ...

  2. ucore进程上下文切换关键代码分析

    目录 进程切换关键代码 上下文切换函数定义 上下文切换函数调用 进程上下文切换整体流程 proc_run执行流程 jmp switch_to如何改变了指令控制流程 执行jmp switch_to指令时 ...

  3. Blog3 无监督深度关键短语生成——关键代码分析1

    2021SC@SDUSC 附所有代码链接:https://github.com/Jayshen0/ Unsupervised-Deep-Keyphrase-Generatio 本篇分析代码模块为:ex ...

  4. <2021SC@SDUSC>博客(5)山东大学软件工程应用与实践JPress代码分析(四)

    2021SC@SDUSC 前言 在前面三篇文章中,我对 JPress 项目的基础框架 JFinal 和 JBoot 在使用层面进行了拆解与分析.在接下来的文章中,我将在代码层面对 JPress 项目中 ...

  5. vin-slam中调用ceres库内部代码分析与性能优化

    vin-slam中调用ceres库内部代码分析与性能优化 1,vin-slam中后端参数优化调用流程代码 2,ceres内部的求解流程(未完待续) 首先,很抱歉前几次上传的关于一些图像算法代码不全,主 ...

  6. Miari部分代码分析

    关于Mirai僵尸病毒攻击分析报告 前言 2016年10月21日,美国东海岸地区遭受大面积网络瘫痪,其原因为美国知名域名解析服务提供商DYN公司当天受到强力的DDoS攻击.该厂商为Github.Twi ...

  7. 【Windows 逆向】OD 调试器工具 ( 分析 OD 硬件断点处的关键代码 | 添加硬件断点 | 关键代码 | MOV 指令 | EAX 寄存器值分析 | 使用命令查看 esi+0cc 地址 )

    文章目录 一.添加硬件断点 二.关键代码 三.MOV 汇编指令格式 四.EAX 寄存器值分析 五.使用命令查看 esi+0cc 地址 一.添加硬件断点 在上一篇博客中 , 在子弹个数数据内存地址 07 ...

  8. 【直播回顾】云栖社区特邀专家关键:Java无锁集合代码分析

    主讲人:关键(云栖社区特邀专家) 目前在广州某家知名公司任职架构师,主要负责Spring Cloud.Dubbo.MQ.Zookeeper的规划. 平时比较热衷于研究互联网技术,热爱生活,希望能结交到 ...

  9. 编写程序描述影视歌三栖艺人 需求说明:请使用面向对象的思想,设计自定义类,描述影视歌三梄艺人。 实现思路及关键代码 1)分析影视歌三栖艺人的特性 a)可以演电影 b)可以演电视剧 c)可以唱歌

    编写程序描述影视歌三栖艺人 需求说明:请使用面向对象的思想,设计自定义类,描述影视歌三梄艺人. 实现思路及关键代码 1)分析影视歌三栖艺人的特性 a)可以演电影 b)可以演电视剧 c)可以唱歌 2)定 ...

最新文章

  1. SLF4j+LOG4j
  2. linux 命令:ls命令
  3. 数据结构:单向链表的反转
  4. 加快发展设施业 农业大健康-林裕豪:从玉农业践行基础支撑
  5. SAP UI5 应用开发教程之十四 - 嵌入视图的使用方式
  6. 【图论】【最短路】【SPFA】【USACO题库】2.4.4 Bessie Come Home回家(jzoj 1274)
  7. 前端html,css基础总结
  8. hdu2553N皇后问题(打表)
  9. 数学建模论文书写总结
  10. 联想拯救者Legion Y7000P 2020款ubuntu20.04安装ros noetic与bloom-generate打包ros noetic为deb软件包
  11. 你有没有见过5GB大小的图片?
  12. 零基础学DevOps必看教程,带你10分钟快速实战入门DevOps
  13. c语言 重新输入,C语言函数重新输入
  14. “%,/,//”的用法
  15. 时间序列中的平稳性检验之单位根检验
  16. PHP 5.5从零开始学 视频教学版pdf
  17. 36 岁捧走图灵碗!80 岁算法大师高德纳要在 105 岁完结《计算机程序设计艺术》...
  18. 亚马逊、沃尔玛卖家自养号退款经验和测评技术
  19. 益和VA 虚拟化应用稳定性深度体验
  20. Ceium调用3dsmax模型

热门文章

  1. Linux whoami指令
  2. JVM并行收集器ParNew、Parallel相关参数
  3. synchronized的可重入怎么实现的
  4. html解析的简单方式,HTML解析看我就够了,不依赖任何第三方,两个方法搞定
  5. dsc linux 软件安装_linux – 安装dsc21时出错:“dsc21:取决于:cassandra(= 2.1.8),但要安装2.2.0”...
  6. Windows10 编译 Open3D 时出现 error C2220: 以下警告被视为错误 (编译源文件
  7. 2.1.1 物理层接口特性、数据通信模型、物理层基本概念(数据、信号、码元 、信源、信道、信宿 、速率、波特、带宽)
  8. mysql not in语句_Mysql学习经验总结【2】
  9. 为什么要进行字节对齐?
  10. javascript / DOM、BOM、document、window 区别和联系