C++ MFC Serialization
C++ MFC Serialization
我需要序列化一个指向基类和派生类的指针向量。序列化两个类都重载的函数,所以我成功地做到了这一点:`
CFile out;
if (!out.Open(filename.c_str(), CFile::modeWrite | CFile::modeCreate))
return false;
CArchive ar(&out, CArchive::store);
for (auto it = container_.begin(); it != container_.end(); ++it)
{
(*it)->Serialize(ar);
}
ar.Close();
out.Close();
所以问题是,我现在应该如何去序列化它?我不知道在从CArchive读取对象时调用正确的构造函数。。。
您首先需要保存容器中的元素计数(使用ar.WriteCount
)。然后(因为容器中有多个类型),对于您序列化的每个元素,您需要包含额外的数据来告诉您该元素的类型。这可能只是一个额外的字符(0=基类,1=第一个派生类)、另一个计数类型号(用WriteCount编写),或者更详细的类型名。
要将其读回,请读取元素计数(使用ar.ReadCount
),然后为要读入的每个元素读取类型字符、计数或其他内容,分配该类型的新元素,反序列化为新分配的元素,最后将分配的元素存储到正在反序列化的容器中。
多年前,为了从MFC容器过渡到STL容器,我需要做一些类似的事情,MFC容器(在<afxtempl.h>
中)使用的Serialize的实现非常有帮助。
相关文章:
- C++ MFC Libraries in Travis CI
- 从 bmp 文件数据创建 MFC CBitmap
- 如何在 MFC 中显示文件的所有行
- 目录删除 MFC 的问题
- MFC:如何设置CEdit框的焦点?
- MFC 中的抗锯齿
- 双击更改 mfc 中列表控件中的行的颜色
- C++MFC编辑框处理双击
- C++ MFC CObject 派生类摘要?
- 如何在 MFC 对话框中使用 OnDraw
- 在 1 个服务器 n 客户端套接字 C++ MFC 应用程序中更新数据的客户端
- MFC:你能在CDateTimeCtrl中改变自旋的加速度吗?
- MFC:我们如何轻松地从CTreeCtrl切换到CTreeView?
- __int64 CString 返回错误的值 - C++ MFC
- 如何在MFC中的静态文本控件上插入图标?
- 使用 MFC 的表/网格
- MFC 中的窗口消息管理:添加基类调用是否是强制性的?
- MFC serialization
- MFC XML Serialization
- C++ MFC Serialization