CArchive::MapObject

telefonar Essa função de membro para posicionar objetos no MAP que não são realmente serializado para o arquivo, mas que estão disponível para subobjetos fazer referência.

void MapObject(
   const CObject* pOb 
);

Parâmetros

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

Comentários

Por exemplo, você não pode serializar um documento, mas seria serializar itens que são parte do documento.Chamando MapObject, você permitir que os itens ou subobjetos para fazer referência no documento. Além disso, subitens serializados podem serializar seus m_pDocument ponteiro de volta.

Você pode telefonar MapObject Quando você armazene e carregar a partir do CArchive objeto. MapObject Adiciona o objeto especificado estruturas de dados interno mantido pelo CArchive objeto durante a serialização e desserialização, mas ao contrário ReadObject and WriteObject, não telefonar serializar 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 de hierarquia

CArchive::ReadObject

CArchive::WriteObject

Outros recursos

CArchive membros