mfcなど、追加する必要があります
DECLARE_SERIAL(CGraph)
もし私がクラスを持っているなら、
class A
{
int a,b;
};
a と b の値をファイルに保存してから読み取ることができます。だから、なぜ DECLARE_SERIAL(CGraph) が使われたのか理解できませんでした。
mfcなど、追加する必要があります
DECLARE_SERIAL(CGraph)
もし私がクラスを持っているなら、
class A
{
int a,b;
};
a と b の値をファイルに保存してから読み取ることができます。だから、なぜ DECLARE_SERIAL(CGraph) が使われたのか理解できませんでした。
DECLARE_SERIAL
およびマクロは、MFC によって提供されるフレームワークを使用してポリモーフィックにシリアル化したいIMPLEMENT_SERIAL
クラスから派生したクラスにのみ必要です。CObject
クラスがから派生していない場合、CObject
および/または MFC のシリアル化をポリモーフィックに (つまり、へのポインターを介して) 使用したくない場合はCObject
、もちろん、当然のことながら独自のソリューションを実装できます。
たとえばDECLARE_SERIAL(CMyClass)
、クラス宣言に入る次のコードに展開されます
protected:
static CRuntimeClass* __stdcall _GetBaseClass();
public:
static CRuntimeClass classCMyClass;
static CRuntimeClass* __stdcall GetThisClass();
virtual CRuntimeClass* GetRuntimeClass() const;
static CObject* __stdcall CreateObject();
friend CArchive& __stdcall operator>>(CArchive& ar, CMyClass* &pOb);
IMPLEMENT_SERIAL(CMyClass, CObject, VERSIONABLE_SCHEMA | 1)
cppファイルに入る次のコードに展開されます
CObject* __stdcall CMyClass::CreateObject()
{
return new CMyClass;
}
extern AFX_CLASSINIT _init_CMyClass;
CRuntimeClass* __stdcall CMyClass::_GetBaseClass()
{
return (CObject::GetThisClass());
}
__declspec(selectany) CRuntimeClass CMyClass::classCMyClass =
{
"CMyClass", sizeof(class CMyClass), (0x80000000) | 1,
CMyClass::CreateObject, &CMyClass::_GetBaseClass, 0, &_init_CMyClass
};
CRuntimeClass* __stdcall CMyClass::GetThisClass()
{
return ((CRuntimeClass*)(&CMyClass::classCMyClass));
}
CRuntimeClass* CMyClass::GetRuntimeClass() const
{
return ((CRuntimeClass*)(&CMyClass::classCMyClass));
}
AFX_CLASSINIT _init_CMyClass((CMyClass::GetThisClass()));
CArchive& __stdcall operator>>(CArchive& ar, CMyClass* &pOb)
{
pOb = (CMyClass*) ar.ReadObject((CMyClass::GetThisClass()));
return ar;
}
MSDNに記載されているように、上記のマクロを使用せずにシリアル化を使用することもできます。