CArchive::MapObject
Chamar essa função de membro para colocar os objetos no mapa que não são serializados no arquivo, mas que está disponível para os subobjects referenciem.
void MapObject(
const CObject* pOb
);
Parâmetros
- pOb
Um ponteiro constante ao objeto que está sendo armazenado.
Comentários
Por exemplo, você não pode serializar um documento, mas você serializaria itens que são parte do documento. Chamando MapObject, você permite que os itens, ou os subobjects, referenciem o documento. Além de isso, os sub-itens serializados pode serializar o ponteiro de volta de m_pDocument .
Você pode chamar MapObject quando você armazena a e carrega do objeto de CArchive . MapObject adiciona o objeto especificado as estruturas de dados internas mantidas pelo objeto de CArchive durante a serialização e desserialização, mas diferentemente de ReadObject e de WriteObject, não chama serializa no objeto.
Exemplo
//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
Cabeçalho: afx.h