17.3.3 序列化元素类(3)
首先调用基类Serialize()函数,处理继承的类成员的序列化。存储矢量内容所用的技术与序列化文档列表所用的技术基本相同。首先将容器中的元素数量写入存档,然后再将元素本身写入存档。CPoint类是可序列化的,所以它本身可以负责处理。读取这些点所采用的技术同样很简单。只需要在for循环中将从存档读取的每个对象存储到矢量m_Points中。序列化过程使用CCurve类无参数的构造函数来创建基类对象,因此vector<CPoint>成员在此过程中创建。
需要将Serialize()函数的实现添加到最后一个类CText中:
- void CText::Serialize(CArchive& ar)
- {
- CElement::Serialize(ar); // Call the base class function
- if (ar.IsStoring())
- {
- ar << m_String; // Store the text string
- }
- else
- {
- ar >> m_String; // Retrieve the text string
- }
- }
在调用了基类函数以后,利用ar的插入和析取运算符序列化m_String数据成员。尽管CString类不是派生于CObject,但是具有这些重载运算符的CArchive仍然完全支持它。