CArchive::MapObject
Llame a esta función miembro para colocar los objetos del mapa que no son realmente serializados en el archivo, pero que esté disponible para que los objetos secundarios se hace referencia.
void MapObject(
const CObject* pOb
);
Parámetros
- pOb
Un puntero constante al objeto que se almacena.
Comentarios
Por ejemplo, puede que no serialice un documento, pero se serializaría los elementos que forman parte del documento.Llamando a MapObject, permite que los elementos, o los objetos secundarios, haga referencia al documento.Además, los subelementos serializados pueden serializar el puntero de reserva de m_pDocument .
Puede llamar a MapObject cuando se almacenado a y carga del objeto de CArchive .MapObject agrega el objeto especificado a las estructuras de datos internas mantenidas por el objeto de CArchive durante la serialización y deserialización pero, a diferencia de ReadObject y de WriteObject, no llama a serializa en el objeto.
Ejemplo
//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
encabezado: afx.h