Compartilhar via


CArchive::MapObject

Chamar essa função de membro para colocar os objetos no mapa que não são serializados no arquivo, mas que está disponível para os subobjects referenciem.

void MapObject( 
   const CObject* pOb  
);

Parâmetros

  • pOb
    Um ponteiro constante ao objeto que está sendo armazenado.

Comentários

Por exemplo, você não pode serializar um documento, mas você serializaria itens que são parte do documento. Chamando MapObject, você permite que os itens, ou os subobjects, referenciem o documento. Além de isso, os sub-itens serializados pode serializar o ponteiro de volta de m_pDocument .

Você pode chamar MapObject quando você armazena a e carrega do objeto de CArchive . MapObject adiciona o objeto especificado as estruturas de dados internas mantidas pelo objeto de CArchive durante a serialização e desserialização, mas diferentemente de ReadObject e de WriteObject, não chama serializa no objeto.

Exemplo

//MyDocument.h
class CMyDocument : public CDocument
{
public:
   DECLARE_SERIAL(CMyDocument)

   CObList m_listOfSubItems;

   virtual void Serialize(CArchive& ar);
};
//MyDocument.cpp
IMPLEMENT_SERIAL(CMyDocument, CDocument, 1)

void CMyDocument::Serialize(CArchive& ar)
{
   CDocument::Serialize(ar);

   if (ar.IsStoring())
   {
      // TODO: add storing code here
   }
   else
   {
      // TODO: add loading code here
   }

   ar.MapObject(this);  

   //serialize the subitems in the document; 
   //they will be able to serialize their m_pDoc 
   //back pointer
   m_listOfSubItems.Serialize(ar);
}
//SubItem.h
class CSubItem : public CObject
{
   DECLARE_SERIAL(CSubItem)
   CSubItem() : m_i(0) {};

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
IMPLEMENT_SERIAL(CSubItem, CObject, 1);

void CSubItem::Serialize(CArchive& ar)

{
   if (ar.IsStoring())
   {
      // will serialize a reference  
      // to the "mapped" document pointer
      ar << (CObject *)m_pDoc;
      ar << m_i;
   }
   else
   {
      // Will load a reference to 
      // the "mapped" document pointer
      ar >> (CObject *&) m_pDoc;
      ar >> m_i;
   }
}

Requisitos

Cabeçalho: afx.h

Consulte também

Referência

Classe CArchive

Gráfico da hierarquia

CArchive::ReadObject

CArchive::WriteObject