DECLARE_SERIAL

生活百科 2023-01-26 10:45生活百科www.aizhengw.cn

DECLARE_SERIAL

DECLARE_SERIAL,DECLARE_SERIAL / IMPLEMENT_SERIAL 宏的技术详解(转) DECLARE_DYNAMIC表明的是支持类型信息。

基本介绍

  • 外文名DECLARE_SERIAL
  • 特指序列化特性
  • 类型序列
  • 套用程式

概念

DECLARE_SERIAL / IMPLEMENT_SERIAL 宏的技术详解(转) DECLARE_DYNAMIC表明的是支持类型信息, 有了这个宏,我们就可以判断一个类究竟是什幺类,比如
class A;
class B:public A;
A a;
B b;
有一个指针 class pA 它指向一个对象, 请问你怎幺知道pA指向的是a对象还是b对象,这时如果有类型信息,我们就可以知道pA到底是什幺对象, 其实,它内部的实现原理是一个字元串,所以,进行这个判断时,实际上是字元串比较.
DECLARE_DYNCREATE是动态创建的意思.这个有点类似Com的类工厂.
它实际上是用类CRunTime class记录了类的静态创建函式的地址.这个特性在很多地方需要使用.就在下面说的DECLARE_SERIAL就是一个经典的例子.
动态创建主要用在 "我不知道要创建的对象就是是什幺类,我知道它肯定是从某个基类派生的".
DECLARE_SERIAL是指序列化特性,它是一个完全自动化的存储机制,它可以将一个对象数组(可能含有A,B,C类的对象)存储进去,而且能够根据存储的情况準确的载入进来,这看起来很简单, ,有一个问题我们必须考虑, 就是怎幺写这个程式,使得载入的时候能够正确创建相应的A,B,C类的对象呢(注意,这里是三个不同的类).而且MFC的设计人员当初编写这个机制的时候根本不知道到底会出现什幺类,也许还会出现D类. 怎幺办呢?
可以肯定,存储机制中必须要有能够判断类种类的代码.所以,序列化机制DECLARE_SERIAL包含了DECLARE_DYNAMIC,这样在存储进入档案的时候,可以将类名称存储到档案中.
OK,我们载入的时候可以知道我们要载入什幺类了,,我们又要怎幺去创建它呢? 所以DECLARE_SERIAL也包含了DECLARE_DYNCREATE,它用于创建对象.
那幺,DECLARE_SERIAL到底有什幺特殊的地方呢?,它必须实现operator>>(具体原因可以看看深入浅出,还有版本控制,这样,我们在处理序列化时,可以很灵活.
记住一点,DECLARE_SERIAL最主要的用途是一种智慧型存储.所以我们可以不用这个智慧型特性.
当我们没有DECLARE_SERIAL,而有void CMessg::Serialize(CArchive& ar)时,我们只能这样进行存储
CDocument::Serialize(ar)
{
if (ar.isstoring())
{
//存储一个对象
pMessg->Serialize(ar);

Copyright@2015-2025 www.aizhengw.cn 癌症网版板所有