CArchive::MapObject
개체를 배치할 파일을 실제로 serialize 되지 않습니다 있지만 하위에 대 한 참조를 사용할 수 있는 지도에서이 멤버 함수를 호출 합니다.
void MapObject(
const CObject* pOb
);
매개 변수
- pOb
상수에 저장 되는 개체 포인터입니다.
설명
예를 들어, 문서를 serialize 할 수 있지만 문서에 포함 된 항목을 serialize 합니다.호출 하 여 MapObject, 이러한 항목 또는 하위 문서를 참조 하려면 다음을 허용 합니다.Serialize 된 하위 항목을 serialize 할 수 있습니다 또한 자신의 m_pDocument 후방 포인터.
호출할 수 MapObject 에 저장 하 고 로드는 CArchive 개체.MapObject유지 되는 내부 데이터 구조에 지정 된 개체를 추가 CArchive 개체를 직렬화 및 역직렬화를 달리 하지만 ReadObject 및 WriteObject, 호출 하지 않습니다 개체를 serialize 합니다.
예제
//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;
}
}
요구 사항
헤더: afx.h