请教串行化的问题:

mul 2002-04-08 04:32:52
class CBase : public CObject
{
DECLARE_SERIAL(CBase);
...
}

class CDerive1 : public CBase
{
DECLARE_SERIAL(CDerive1);
...
}

class CDerive2 : public CBase
{
DECLARE_SERIAL(CDerive2);
...
}

class CDerive3 : public CBase
{
DECLARE_SERIAL(CDerive3);
...
}

class CApp
{
CArray<CBase*,CBase*> m_BaseArray;
int m_nObjNum;
...
}
m_BaseArray可能存入 CDerive1,CDerive2,CDerive3 对象指针。
现在我想在串行化中实现类似以下代码的效果:

CApp::Serialize(ar)
{
if (ar.IsStore())
{
.....
}
else
{
ar >> m_nObjNum;
for (int i=0; i<m_nObjNum; i++)
{
ar >> m_BaseArray[i];
}
}
}

就是不考虑载入的是CDerive1*,CDerive2*,CDerive3*中的哪一种,都以CBase*代替,类似多态性。


...全文
68 8 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
mul 2002-04-08
  • 打赏
  • 举报
回复
webber84(糕鱼昏)
不会吧,在存档的时候是会调用继承类的Serialize()
但在载入时,它并不知道是什么类的对象
出错

谢谢webber84(糕鱼昏)

webber84 2002-04-08
  • 打赏
  • 举报
回复
你的继承类里难道没有重写Serialize()这个虚函数吗?直接调用CArray的Serialize()函数,它自然会为你调用相应的类中的Serialize
mul 2002-04-08
  • 打赏
  • 举报
回复
那我请教一下大家,你们是如何串行化这个 m_BaseArray 的?

有说话的就给分

mul 2002-04-08
  • 打赏
  • 举报
回复
难道真的要我在CBase里加上 m_nType 来辨别是那个类的对象吗?
有没有好一点的解决办法?
大家帮帮忙。
mul 2002-04-08
  • 打赏
  • 举报
回复
帮帮忙啊,各位
To: Lchaos(nicky) ( ) 信誉:100
m_BaseArray放的是指针。


我的问题是:
不考虑载入的是CDerive1*,CDerive2*,CDerive3*中的哪一种,都以CBase*代替,类似多态性
Lchaos 2002-04-08
  • 打赏
  • 举报
回复
对于对象,很显然,你如果想串行化应该使用:
m_BaseArray[i].Serialize()。
mul 2002-04-08
  • 打赏
  • 举报
回复
还没有人吗?
mul 2002-04-08
  • 打赏
  • 举报
回复
还没人吗?

16,548

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • AIGC Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧