gpt4 book ai didi

c++ - 序列化具有不同成员的继承类 MFC c++

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

我用 MFC c++ 构建了一个绘图应用程序。所有序列化都适用于从“Shape”继承的类。 (如椭圆、圆形、矩形)。这是形状的序列化函数:

    void Shape::Serialize(CArchive& archive)
{
// call base class function first
// base class is CObject in this case
CObject::Serialize(archive);

// now do the stuff for our specific class
if (archive.IsStoring())
archive << start.x << start.y << end.x << end.y << innerColor << outerColor << thick << style;
else
archive >> start.x >> start.y >> end.x >> end.y >> innerColor >> outerColor >> thick >> style;

}

这是调用序列化的函数:

    void CPaintDlg::SaveScreen()
{
CFile file(L"FILE.$$", CFile::modeWrite | CFile::modeCreate);
CArchive ar(&file, CArchive::store);
Shapes.Serialize(ar);
}

这是反序列化调用的地方:

    void CPaintDlg::LoadScreen()
{
try
{
CFile file(L"FILE.$$", CFile::modeRead);
CArchive ar(&file, CArchive::load);
Shapes.Serialize(ar);
}
catch (...)
{
AfxMessageBox(_T("Some thing went wrong"));
}
InvalidateRect(&rect);
}

我拿着一个 CTypedPtrArray<CObArray , Shape*> 调用 Shapes 并且我从这个数组的每个索引调用 Draw func。我有另一个类叫做 FreedDraw它派生自 Shape,它有一个 Shape 没有的成员,该成员称为 Points。(包含在屏幕上自由绘制的所有点的 vector )。

在我宣布的每个类(class)中DECLARE_SERIAL(FreeDraw)在 cpp 文件中 IMPLEMENT_SERIAL(FreeDraw, Shape, 1)我不知道如何序列化和反序列化这个 vector 以及如何将它与我现有的序列化函数合并。

最佳答案

基本上可以先放入 vector 的存档大小,然后可以通过循环从存档对象中读取该大小吗?

关于c++ - 序列化具有不同成员的继承类 MFC c++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41876519/

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