Welcome

首页 / 软件开发 / 数据结构与算法 / 应用程序框架设计(3):RuntimeClass与序列化

应用程序框架设计(3):RuntimeClass与序列化2010-04-11 csdn 许式伟SW系统的根是SObject,顾名思义是对普遍意义上的对象的抽象。其主要的支持有:

运行时刻类信息(RuntimeClass)

运行时刻类信息是经典程序结构中一个极其重要的部分。MFC、VCL、OWL、TurboVision都支持运行时刻类信息。它可能也是经典Object类中唯一比较实用的东西。而同时它也是Object类最容易让人感到迷惑的地方。简单地说,运行时刻类信息主要有两个用途:

a)创建对象

b)确定对象的类型

其实RuntimeClass的实现机制一点也不神秘。它无非是通过类注册方式将类名与其父类、实例创建函数联系起来。

SW系统的运行时刻类信息定义为:

typedef SObject * (*FNBUILDER)();
struct SRuntimeClass
{
LPCTSTR m_lpszClassName;// 类名
SRuntimeClass * m_lpBaseClass;// 父类
FNBUILDER m_fnCreator;// 实例创建
SRuntimeClass *m_lpPrevClass;
};

每一个SW系统的类都对应有一个SRuntimeClass实例来描述该类。可以用__typeid(Class)来找到定位该类RuntimeClass信息。此宏与MFC的RUNTIME_CLASS(Class)宏完全相同。

注意到SRuntimeClass有一个成员m_lpPrevClass,它只是用于在系统维护RuntimeClass链表。从而可以让用户通过类的名字来查询一个类的运行时刻类信息,并且创建该类的对象。例如下面的序列化技术就需要这样做。