json2jsoncpp 关键代码分析1
生活随笔
收集整理的這篇文章主要介紹了
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的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 一般纳税人水利基金计算公式
- 下一篇: 宝马召回最新消息,因为安全带存在隐患召回