C++反射机制及其应用
总所周知,hibernate依赖于JAVA的反射机制,从配置文件中动态生成对象,那么我的话题是用C++如何效仿hibernate实现对象持久化?在此简单探讨一下本人的研究,呵呵 1)可行性: 既然JAVA有专门的反射类,其实现也一定是玩内存,只是JAVA封装了内存操作。C++是操作内存的语言,自然可以实现JAVA能实现的东西,所以C++实现动态生成对象也就是可行的了,呵呵 2)实现方案: 基本反射: 大家都知道,内存中的对象无非就是在内存中的一块空间,对象指针就是内存中对象的起始,对象的成员依次按照空间排列,所以C++对象反射无非就是先声明一块内存空间,然后逐个将对象的成员变量填入,维护一个对象地址及其成员变量的信息即可(包括变量的地址,类型,名称、属性等),至于get和set方法,实现的办法就容易了,可以动态申请一块空间,存放get和set函数的代码,也可以由反射机制提供模拟函数的办法,直接操作内存,模拟实现get和set的方法,这样,对象反射机制就初步实现了,呵呵 缓存中的对象图: hibernate的session对象缓冲中存放的是一张对象图,也就是各种对象及其关系,那么C++在内存如何实现这种对象图?其实也不难,可以在内存中维护一张类似的关系表,体现出对象的各种关系,并提供对象导航的方法,就可以了,其实这个玩的是逻辑了,反倒容易了,呵呵 对象持久化: 和hibernate类似,建立缓存,得到对象的快照,然后把更新后对象和原快照对比,选出变化后的变量进行数据库操作,呵呵 对象-关系映射: 有了技术实现方案,这个就可以仿照hibernate了,呵呵 3)C++实现反射的应用及问题: 1 C++实现对象持久化有何应用:其实我觉得好像应用不大:) 不过在一些频繁操作数据库的场合可能有应用,比如C++的服务器,例如游戏服务器或者流媒体服务器等,呵呵 2 C++的一个问题:C++如何从程序级别实现数据库的事务操作?