CArchive::MapObject
Appelez la fonction membre pour définir les objets de la carte qui ne sont pas véritablement sérialisés au fichier, mais qui sont disponibles pour les sous-objets référence.
void MapObject(
const CObject* pOb
);
Paramètres
- pOb
Un pointeur constante à l'objet qui est stocké.
Notes
Par exemple, vous ne pouvez pas sérialiser un document, mais vous sérialiseriez les éléments qui font partie du document. En appelant MapObject, vous permettez à ces éléments, ou à sous-objets, pour référencer le document. En outre, les sous-éléments sérialisés peut sérialiser leur pointeur de restauration d' m_pDocument .
Vous pouvez appeler MapObject lorsque vous enregistrez et chargez de l'objet d' CArchive . MapObject ajoute l'objet spécifié aux structures de données internes mises à jour par l'objet d' CArchive pendant la sérialisation et la désérialisation, mais contrairement à ReadObject et de WriteObject, il n'appelle pas sérialisent sur l'objet.
Exemple
//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;
}
}
Configuration requise
Header: afx.h