DECLARE_DYNAMIC/DECLARE_DYNCREATE/DECLARE_SERIAL

DECLARE_DYNAMIC/DECLARE_DYNCREATE/DECLARE_SERIAL

DECLARE_DYNAMIC支持运行时类型识别,DECLARE_DYNCREATE支持动态创建,DECLARE_SERIAL支持串行化。

 

DECLARE_DYNAMIC 表明的是支持类型信息,有了这个宏,我们就可以判断一个类究竟是什么类,比如  
  class   A;  
  class   B:public   A;  
  A   a;  
  B   b;  
  现在有一个指针  class* pA 它指向一个对象,请问你怎么知道pA指向的是a对象还是b对象,这是如果有类型信息,我们就可以知道pA到底是什么对象,其实,它内部的实现原理是一个字符串,所以,进行这个判断时,实际上是字符串比较.  

 

DECLARE_DYNCREATE 是动态创建的意思.这个有点类似Com的类工厂. 它实际上是用CRuntimeClass记录了类的静态创建函数的地址.这个特性在很多地方需要使用.就在下面说的DECLARE_SERIAL就是一个经典的例子.动态创建主要用在"我不知道要创建的对象是什么类,但是我知道它肯定是从某个基类派生的".

 

DECLARE_SERIAL 是指序列化特性,它是一个完全自动化的存储机制,它可以将一个对象数组(可能含有A,B,C类的对象)存储进去,而且能够根 据存储的情况准确的载入进来,这看起来很简单,但是,有一个问题我们必须考虑,就是怎么写这个程序,使得载入的时候能够正确创建相应的A,B,C类的对象呢(注意,这里是三个不同的类).而且MFC的设计人员当初编写这个机制的时候根本不知道到底会出现什么类,也许还会出现D类.   怎么办呢? 可以肯定,存储机制中必须要有能够判断类种类的代码.所以,序列化机制DECLARE_SERIAL包含了DECLARE_DYNAMIC,这样在存储进入文件的时候,可以将类名称存储到文件中.OK,现在我们载入的时候可以知道我们要载入什么类了,但是,我们又要怎么去创建它呢?   所以DECLARE_SERIAL也包含了DECLARE_DYNCREATE,它用于创建对象.那么,DECLARE_SERIAL到底有什么特殊的地方呢?首先,它必须实现operator>>,还有版本控 制,这样,我们在处理序列化时,可以很灵活.

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值