CArchive::MapObject
telefonar Essa função de membro para posicionar objetos no MAP que não são realmente serializado para o arquivo, mas que estão disponível para subobjetos fazer referência.
void MapObject(
const CObject* pOb
);
Parâmetros
- pOb
Um ponteiro constante para o objeto que está sendo armazenado.
Comentários
Por exemplo, você não pode serializar um documento, mas seria serializar itens que são parte do documento.Chamando MapObject, você permitir que os itens ou subobjetos para fazer referência no documento. Além disso, subitens serializados podem serializar seus m_pDocument ponteiro de volta.
Você pode telefonar MapObject Quando você armazene e carregar a partir do CArchive objeto. MapObject Adiciona o objeto especificado estruturas de dados interno mantido pelo CArchive objeto durante a serialização e desserialização, mas ao contrário ReadObject and WriteObject, não telefonar serializar 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