CArchive::MapObject
Wywołać funkcję Członkowskie umieścić obiekty na mapie tak naprawdę nie są szeregowane do pliku, ale dostępnych dla podobiektów odwołać.
void MapObject(
const CObject* pOb
);
Parametry
- pOb
Stała wskaźnik do obiektu są przechowywane.
Uwagi
Na przykład nie może szeregować dokumentu, ale będzie serializować elementy, które są częścią dokumentu.Wywołując MapObject, umożliwić te elementy lub podobiektów do referencyjnego dokumentu.Również można szeregować szeregowany podelementy ich m_pDocument wskaźnik Wstecz.
Można wywołać MapObject podczas przechowywania do i załadować z CArchive obiektu.MapObjectDodaje określony obiekt do wewnętrznych struktur danych przez CArchive obiektu podczas serializacji i deserializacji, ale w przeciwieństwie do funkcji ReadObject i funkcji WriteObject, nie wywołuje serializować obiektu.
Przykład
//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;
}
}
Wymagania
Nagłówek: afx.h