MFCにてダイナミックにDECLARE_DYNCREATEを生成し、ランタイム時の型識別をDECLARE
MFC(Microsoft Foundation Classes)では、DECLARE_DYNCREATE、DECLARE_RUNTIME_CLASS は動的作成とランタイム型識別をサポートするマクロです。
- クラスに動的作成をサポートするためのマクロ「DECLARE_DYNCREATE」です。定義は次のとおりです。
#define DECLARE_DYNCREATE(class_name) \
static CRuntimeClass* PASCAL class_name::GetThisClass(); \
virtual CRuntimeClass* GetRuntimeClass() const;
このマクロは、クラスの宣言で使用するために使用されます。このマクロは、静的メンバ関数GetThisClass()と仮想関数GetRuntimeClass()を自動生成します。GetThisClass()関数は、クラスのランタイムクラスオブジェクト(CRuntimeClass)を返し、GetRuntimeClass()関数は、現在のオブジェクトのランタイムクラスオブジェクトを返します。
- 実行時型情報(Runtime Class)とはオブジェクトの型を実行時に決定するメカニズムです。DECLARE_RUNTIME_CLASSマクロはクラスの実装の中で、そのクラスが実行時型情報をサポートすることを宣言します。このマクロは以下のように定義されています:
#define DECLARE_RUNTIME_CLASS(class_name) \
static char _lpszThisClass[]; \
virtual CRuntimeClass* GetRuntimeClass() const;
このマクロはクラスの実装で使用されなければならず、静的な文字配列 _lpszThisClass[] および現在のオブジェクトのランタイムクラスオブジェクトを返す仮想関数 GetRuntimeClass() を自動生成します。
この2つのマクロは動的作成と実行時型識別のサポートを目的としており、これによりMFCは実行時にクラスの型に基づいてオブジェクトを動的に作成し、オブジェクトの型に基づいて実行時クラスオブジェクトを決定することができます。これにより、オブジェクトの作成と型判定を容易に行えます。