json2jsoncpp 关键代码分析1
j2jc有個(gè)高級(jí)功能就是實(shí)現(xiàn)從一個(gè)json字符串自動(dòng)生成對(duì)象的功能
她主要是通過一個(gè)做一個(gè)map,實(shí)現(xiàn)類名字符串對(duì)應(yīng)new對(duì)象的函數(shù),通過字符串調(diào)用相對(duì)應(yīng)的new類的函數(shù)(見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函數(shù)就是把一個(gè)類名字符串與一個(gè) string2object* newobjfun函數(shù)關(guān)聯(lián)起來
這個(gè)函數(shù)類似這樣:
string2object* newfun() {return CLASS1; }?
而CLASS1又是繼承string2object的
class CLASS1:public string2object {//... }?
所以,當(dāng)調(diào)用:
string2object * p=string2object::NEW("CLASS1");?
這時(shí)候會(huì)調(diào)用之前注冊(cè)的時(shí)候注冊(cè)的new地址
string2object.h
static string2object * NEW(std::string name){lock(x);newobjfun retval=n2o[name];unlock(x);if(!retval){return 0;}return retval();}?
?
這樣就會(huì)得到CLASS1的對(duì)象指針
后面的事情就比較簡單了,
可以做decode調(diào)用,并且調(diào)用decodesuccess方法
?
這就是j2jc高級(jí)應(yīng)用的基本原理,當(dāng)然里面還有很多事情要處理,后面的文章將會(huì)繼續(xù)分析
轉(zhuǎn)載于:https://www.cnblogs.com/vanis/archive/2013/02/28/2936110.html
總結(jié)
以上是生活随笔為你收集整理的json2jsoncpp 关键代码分析1的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 一般纳税人水利基金计算公式
- 下一篇: 宝马召回最新消息,因为安全带存在隐患召回