是这样的
我查看MFC的源代码,这两个操作符,是先调用 CArchive 类的 WriteObject、ReadObject函数,
而 WriteObject函数先调用WriteClass函数写入类信息,然后调用 Serialize 函数。
ReadObject函数也是先调用ReadClass函数读取类信息,然后调用Serialize函数。
但是 为什么 经常看到不使用 <<、>> ,而是直接调用Serialize函数,这样在保存文件的时候就没有写入类信息吧?
那么在读的时候,就无法创建类对象了吧?比如下面的代码:
void CSampleData::Serialize(CArchive &ar)
{
CObject::Serialize(ar); //进行基类的序列化
if (ar.IsStoring())
{
ar << m_strName << m_nType; //保存数据
}
else
{
ar >> m_strName >> m_nType; //读取数据
}
m_Data.Serialize(ar); //串行化CSampleChildData 类的对象 m_Data
}
另外,
我对什么时候
应该使用 << 、>> ,以及什么时候
可以使用 << 、>> ,有些困惑,是不是只要是衍生自CObject类,并且DECLARE/IMPLEMENT了 SERIAL的宏,就可以使用 << 、>> 对自己定义的类的对象进行读取和写入文件操作吗?
多谢!