按照本教程中,http://msdn.microsoft.com/en-us/library/vstudio/3bfsbt0t.aspx我實現這個代碼:與運營商<< > CArchive的序列化>沒有操作員發現這需要類型的左手的CArchive
class Esame: public CObject
{
public:
INT voto;
INT crediti;
BOOL lode;
CString nome;
Esame(){}
Esame(CString nome, INT voto, BOOL lode, INT crediti) :nome(nome), voto(voto), lode (lode), crediti(crediti) {}
void Serialize(CArchive& ar);
protected:
DECLARE_SERIAL(Esame)
};
IMPLEMENT_SERIAL(Esame, CObject, 1)
void Esame::Serialize(CArchive& ar){
CObject::Serialize(ar);
if (ar.IsStoring())
{
ar << voto << lode << crediti;
}
else
{
ar >> voto >> lode >> crediti;
}
}
然後我打電話:
CFile file(_T("file.and"), CFile::modeCreate);
CArchive afr(&file, CArchive::store);
Esame e;
afr << e;
但我得到 < <操作員找不到操作員找到哪個類型需要左手存檔
好,但是我失去了使用CArchive的「舒適性」:我可以簡單地重載<< and >>作爲任何祖先類; CArchive的幫助(我相信)會自動執行運算符的重載(我認爲這是通過DECLARE_SERIAL和IMPLEMENT_SERIAL宏完成的)。手動超載<< >>通常是系統 – volperossa