json2jsoncpp 关键代码分析2

上一篇已经讲了j2jc实现从json数据直接生成对象的基本原来,本篇将继续分析是如何做到的

如果你有执行看用j参数生成的头文件你会发现,里面所有的类都是继承与一个叫json2jsoncpp的类的

class rpc1:public json2jsoncpp
{
private:
    virtual bool decodesuccess(){return true;}

    static string2object * NEW()
    {
        return new rpc1;
    }

public:
    static bool REG(newobjfun fun=0)
    {
        if(fun)return string2object::REG("rpc1",fun);
        else return string2object::REG("rpc1",NEW);
    }

    static bool UNREG()
    {
        return string2object::UNREG("rpc1");
    }
    //...
}

 

这个类就来至json2jsoncpp.h

然后看json2jsoncpp.h

其实这个json2jsoncpp也是继承与string2object的

class json2jsoncpp:public string2object
{
public:

    template<typename NEWCLSX>
    static string2object * NEW()
    {
        return new NEWCLSX;
    }

    template<typename REGCLSX>
    static bool REG()
    {

        return REGCLSX::REG( NEW<REGCLSX> );
    }

    template<typename UNREGCLSX>
    static bool UNREG()
    {
        return UNREGCLSX::UNREG();
    }
    //...

}

 

注册代码:

class G1:public rpc1
{
    //...
}




////

//注册G1
json2jsoncpp::REG<G1>();

G1是继承rpc1的,所以自然有了rpc1的所有内容,包括

static bool REG(newobjfun fun=0)
    {
        if(fun)return string2object::REG("rpc1",fun);
        else return string2object::REG("rpc1",NEW);
    }

 

主要关注return string2object::REG("rpc1",fun); 这一行,她就是向string2object注册名字和new函数

但是fun从哪来呢?

看代码return REGCLSX::REG( NEW<REGCLSX> );

REGCLSX就是G1

那就是掉用G1::REG( x )  (其实就是调用rpc1::REG)

x就是那个fun了

再看NEW<REGCLSX> 实际上就是:

static string2object * NEW() { return new G1; }

这个new 函数了

 

所以自然把字符串“rpc1” 和  static string2object * NEW() { return new G1; }  关联了起来

 

后面的事情就好办多了

先写到这里,大家先消化消化

 

转载于:https://www.cnblogs.com/vanis/archive/2013/03/01/2939456.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值