Condividi tramite


CArchive::MapObject

Chiamare la funzione membro per posizionare gli oggetti nella mappa che non vengono serializzati nel file, ma che sia disponibile per oggetti secondari di fare riferimento.

void MapObject( 
   const CObject* pOb  
);

Parametri

  • pOb
    Un puntatore costante all'oggetto archiviato.

Note

Ad esempio, non è possibile serializzare un documento, ma serializzereste gli elementi che fanno parte del documento. Chiamando MapObject, si consente a tali elementi, o oggetti secondari, facciano riferimento al documento. Inoltre, gli elementi secondari serializzati può serializzare il puntatore della parte finale m_pDocument.

È possibile chiamare MapObject quando viene generato un oggetto e caricate dall'oggetto CArchive. MapObject aggiunge l'oggetto specificato alle strutture di dati interne gestite dall'oggetto CArchive durante la serializzazione e la deserializzazione, a differenza ReadObject e WriteObject, non chiama serializza l'oggetto.

Esempio

//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;
   }
}

Requisiti

Header: afx.h

Vedere anche

Riferimenti

Classe CArchive

Grafico delle gerarchie

CArchive::ReadObject

CArchive::WriteObject