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高级应用的基本原理,当然里面还有很多事情要处理,后面的文章将会继续分析

posted @ 2013-02-28 01:18  卡卡的Blog  阅读(169)  评论(0)    收藏  举报