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

    本篇博客为原创作品,个人转载或引用时请保留本人的署名及博客网址,商业转载请事先联系。我的博客地址是:http://www.cnblogs.com/vanis/ , 我的hotmail.com邮箱是vanishs
  • 相关阅读:
    Oracle优化器模式不同导致索引失效
    Python补零操作
    正则表达式
    python习题(二)
    Linux常见报错及解决方法(持续更新)
    总结(三)----2020上
    总结二
    总结---持更
    python多线程实现方式,最基础的实现方式模块是什么
    python2和python3区别
  • 原文地址:https://www.cnblogs.com/vanis/p/2936110.html
Copyright © 2011-2022 走看看