C++ MFC Serialization

C++ MFC Serialization

本文关键字:Serialization MFC C++      更新时间:2023-10-16

我需要序列化一个指向基类和派生类的指针向量。序列化两个类都重载的函数,所以我成功地做到了这一点:`

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的实现非常有帮助。