[英]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的实现非常有帮助。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.