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