书上都说,如果想实现一个可串行化的类,需要从CObject派生,并且加上DECLARE_SERIAL和IMPLEMENT_SERIAL等等……我想问的是,如果自己手动加上“friend CArchive& AFXAPI operator>>(...)”、“friend CArchive& AFXAPI operator<<(...)”和“virtual void Serialize(CArchive& ar)”是不是也能实现类的双向串行化了呢?我不太喜欢用MFC定义的那些鸟宏,什么都是宏,永远不知道程序里到底干了些什么。你们看,我做了一个类,比方叫“c”,我想实现“ar<<c”或“ar>>c”的功能,当然也想在文档视图结构的程序里能够顺利的串行化,然后我从CString的MFC源代码里拷贝了“<<”和“>>”两个函数的声明(因为开始时自己不太会写),改吧改吧,让它可以为我的类服务,这样是不是也算是实现类的串行化了呢?各位高手,告诉告诉我吧。我这样做,跟使用DECLARE_SERIAL和IMPLEMENT_SERIAL宏区别在哪里?
解决方案 »
- CString("1") + "2" 会报一个"传递给系统调用的数据区域太小"是神马情况?
- 调整“圆,椭圆,矩形,菱形,直线”
- 高分:程序如何建立Word文档,将已知的图片文件加到这个DOC文件中去,有例子么?
- 程序退出时,提示内存不能为“Read”,请指点迷津
- 组合框如何得到当前选项的索引?
- 如何解决堆栈溢出
- CPropertySheet内的按钮是自动加上的吗?怎样使之有效?
- 好郁闷那
- 线程中弹出一个模态对话框,结果使得整个UI卡住,动不了,该怎样处理?
- 有谁实现过在win2000下用win98下装的vc?
- 自定义消息时,SendMessage函数中有一个参数是窗口句柄hwnd,请问,此句柄是怎样定义的?非常感谢
- 怎么给一个基于对话框的应用程序加上菜单?
用宏倒是也没什么,其实我自己编程序时也经常自编些乱七八糟的宏。
但是我展开看后,发送DECLARE_SERIAL宏好像只有“>>”的重载,而没有“<<”的。To bluebohe:“支持串行化的类没有必要从CObject派生”你确定吗?确定的话,学生可就这么记住了哦!不过你后面的话,我严重同意——在不考虑成本,或者不得不支持多平台的情况下。两位高手,谢谢你们。在这次思考中,我还意外发现两个以前没注意到的问题:1,像“friend CArchive& AFXAPI operator<<(...)”这样的函数定义有点意思哦,它看上去像是在这个类里重载/实现令一个类的函数。好像是这样,因为这个运算符重载函数明明是CArchive里的,而且,当使用“ar<<c”的时候,按理讲应当调用的是ar理的函数哦。但是这怎么可能呢?(我说明白了吗)2,上面那个重载函数的定义中,有一个const参数,即:
friend CArchive& AFXAPI operator<<(CArchive& ar,const CMyClass& cSrc)”
//这样一来,像下面这样的调用时:
{
cSrc.MemberFunc1(...);
}
就要求MemberFunc1必须也是const的:
class CMyClass
{
MemberFunc1(...) const;
}=============
呵呵,两个发现,以前没注意。
成员operator<<是每个类不同的,你可以为每个类写一个operator<<