CArchive::MapObject

Эта функция-член вызывается, чтобы задать объекты в сопоставлении, которые действительно не сериализованы к файлу, но доступен для subobjects ссылки.

void MapObject(
   const CObject* pOb 
);

Параметры

  • pOb
    Постоянный указатель в храненным объекту.

Заметки

Например, не могут сериализовать документ, но сериализоватьTfи бы элементы, являющиеся частью документа.Вызовом MapObject, вы разрешите эти элементы или subobjects, для ссылки на документ.Кроме того, сериализованные подэлементы могут сериализовать их указатель обратно m_pDocument.

Можно вызвать MapObject, когда необходимо сохранять и загружать из объекта CArchive.MapObject добавляет указанный объект к внутренним структурам данных, поддерживаемым объектом CArchive во время сериализации и десериализации, но в отличие от ReadObject и WriteObject, она не вызывает выполняется сериализация объекта.

Пример

//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;
   }
}

Требования

Header: afx.h

См. также

Ссылки

Класс CArchive

Диаграмма иерархии

CArchive::ReadObject

CArchive::WriteObject