zoukankan      html  css  js  c++  java
  • 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; }  关联了起来

    后面的事情就好办多了

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

     

    本篇博客为原创作品,个人转载或引用时请保留本人的署名及博客网址,商业转载请事先联系。我的博客地址是:http://www.cnblogs.com/vanis/ , 我的hotmail.com邮箱是vanishs
  • 相关阅读:
    5个JavaScript的字符串处理库
    一款在线还款记账产品诞生实战
    企业级B端产品:如何建立一致性设计规范和度量标准?
    15个产品与交互必懂的技术用语!
    利润的来源:会员权益的前置和后置
    为什么设计工作总是感觉很被动?
    中国服装业首次负增长背后,是设计垄断权引领需求的逻辑失效
    怎么样写出卖货文案?试试加一点“想象力”
    SublimeText 3200 package Control 安装
    FlappyBirdWeb素材资源
  • 原文地址:https://www.cnblogs.com/vanis/p/2939456.html
Copyright © 2011-2022 走看看