gpt4 book ai didi

C++ MFC 序列化

转载 作者:行者123 更新时间:2023-11-28 05:58:38 24 4
gpt4 key购买 nike

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

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> 中)非常有帮助。

关于C++ MFC 序列化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33703914/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com