网站首页  词典首页

请输入您要查询的计算机术语:

 

术语 CArchive::MapObject
释义 CArchive::MapObject

void MapObject(const CObject* pOb);

参数:
pOb指向正在存储的对象的指针。

说明:
调用此成员函数在映射中放置对象。此映射没有真的对文件串行化,但是对参考的子对象有效。举例来说,可能不想串行化一个文档,但是想对作为文档一部分的项串行化。通过调用MapObject,可允许那些项或子对象参考文档。而且,串行化子项还可以串行化它们的m_pDocument向后的指针。
当要把数据存储到CArchive对象和从它装载数据时,可以调用MapObject。在串行化和非串行化的过程中,MapObject向由CArchive保持的内部数据结构添加特定的对象,但是它不象ReadObject和WriteObject那样,它不会对对象串行化。

示例:
//MyDoc.h
//Document should have DECLEAR_SERIAL and IMPLEMENT_SERIAL
class CMyDocument: public CDocument
{
  CObList m_listOfSubItems;
  ...
  DECLARE_SERIAL(CMyDocument)
};
//MyDoc.cpp
...
IMPLEMENT_SERIAL(CMyDocument.CObject,1)
...
void CMyDocument::Serialize(CArchive& ar)
{
  if (ar.IsStoring( ))
  {
    //TODO:add storing code here
  }
  else
  {
    //TODO:add loading code here
  }
  ar.MapObject(this);
  //serialize the subitems in the documents;
  //they will be able to serialize their m_pDoc
  //back pointer
  m_listOfSubItems.Serialize(ar);
}

//SubItem.h
class CSubItem:public CObject
{
  public:
   CSubItem(CMYDocument * pdoc) { m_pDoc = pDoc }
   //back pointer to owning document
   CMYDocument* m_pDoc
   WORD m_I; //other item data
   virtual void Serialize(CArchive& ar);
};

//SubItem.cpp
void CSubItem:Serialize(CArchive& ar)
{
  if (ar.IsStoring( ))
  {
    //will serializing a reference
    //to the “mapped”document pointer
    ar <    ar<  }
  else
  {
    //will load a reference to
    //the “mapped”document pointer
    ar >>m_pDoc;
    ar >>m_i;
  }
}

请参阅:CArchive::ReadObject, CArchive::WriteObject
随便看

 

MFC类库中文详解手册包含4274条MFC类库参考词条,基本涵盖了Microsoft基本类库中的类、全局函数、全局变量和宏的内容,是计算机编程的有利工具。

 

Copyright © 2004-2023 Winrtm.com All Rights Reserved
京ICP备2021023879号-40 更新时间:2024/10/6 14:34:38