Listing 2
class CJobDef : public CReferable
{
friend CArchive &operator << (CArchive &ar, const CJobDefPtr &cand)
{
ar << cand->getTag();
CArchive ar_def(cand->getTag(), CArchive::WRITE);
// write object attributes to ar_def
return ar;
}
friend CArchive &operator >> (CArchive &ar, CJobDefPtr &cand)
{
int tag;
ar >> tag;
CArchive ar_def(tag, CArchive::READ);
// read object attributes from ar_def
cand.impersonate(tag);
return ar;
}
};
class CJobInst : public CReferable
{
friend CArchive & operator << ( CArchive &ar, const CJobInstPtr &cand)
{
ar << cand->m_defPtr;
return ar;
}
friend CArchive & operator >> (CArchive &ar, CJobInstPtr &cand)
{
CJobDefPtr defPtr = new CJobDef;
ar >> defPtr;
cand->m_defPtr = defPtr;
return ar;
}
};