次の方法で共有


CRuntimeClass 構造体

CObjectから派生した各クラスは、実行時にオブジェクトまたはその基底クラスに関する情報を取得するために使用できるCRuntimeClass構造体に関連付けられています。

構文

struct CRuntimeClass

メンバー

パブリック メソッド

名前 説明
CRuntimeClass::CreateObject 実行時にオブジェクトを作成します。
CRuntimeClass::FromName 使い慣れたクラス名を使用して、実行時にオブジェクトを作成します。
CRuntimeClass::IsDerivedFrom クラスが指定したクラスから派生しているかどうかを判断します。

パブリック データ メンバー

名前 説明
CRuntimeClass::m_lpszClassName クラスの名前。
CRuntimeClass::m_nObjectSize オブジェクトのサイズ (バイト単位)。
CRuntimeClass::m_pBaseClass 基底クラスの CRuntimeClass 構造体へのポインター。
CRuntimeClass::m_pfnCreateObject オブジェクトを動的に作成する関数へのポインター。
CRuntimeClass::m_pfnGetBaseClass CRuntimeClass構造体を返します (動的にリンクされている場合にのみ使用できます)。
CRuntimeClass::m_wSchema クラスのスキーマ番号。

解説

CRuntimeClass は構造体であるため、基底クラスはありません。

実行時にオブジェクトのクラスを決定する機能は、関数引数の追加の型チェックが必要な場合や、オブジェクトのクラスに基づいて特別な目的のコードを記述する必要がある場合に便利です。 ランタイム クラス情報は、C++ 言語では直接サポートされていません。

CRuntimeClass は、基底クラスの CRuntimeClass へのポインターや、関連するクラスの ASCII クラス名など、関連する C++ オブジェクトに関する情報を提供します。 この構造体には、オブジェクトを動的に作成したり、使い慣れた名前を使用してオブジェクトの型を指定したり、関連するクラスが特定のクラスから派生しているかどうかを判断したりするために使用できるさまざまな関数も実装されています。

CRuntimeClassの使用方法の詳細については、ランタイム クラス情報のアクセスに関する記事を参照してください。

継承階層

CRuntimeClass

要件

ヘッダー: afx.h

CRuntimeClass::CreateObject

この関数を呼び出して、実行時に指定したクラスを動的に作成します。

CObject* CreateObject();

static CObject* PASCAL CreateObject(LPCSTR lpszClassName);

static CObject* PASCAL CreateObject(LPCWSTR lpszClassName);

パラメーター

lpszClassName
作成するクラスの使い慣れた名前。

戻り値

新しく作成されたオブジェクトへのポインター。クラス名が見つからない場合、またはオブジェクトを作成するためのメモリが不足している場合は NULL。

解説

CObjectから派生したクラスは、実行時に指定したクラスのオブジェクトを作成する機能である動的作成をサポートできます。 たとえば、ドキュメント クラス、ビュー クラス、フレーム クラスでは、動的な作成をサポートする必要があります。 動的な作成と CreateObject メンバーの詳細については、「 CObject クラス および CObject クラス: 機能レベルの指定を参照してください。

IsDerivedFrom の例を参照してください。

CRuntimeClass::FromName

この関数を呼び出して、使い慣れた名前に関連付けられている CRuntimeClass 構造体を取得します。

static CRuntimeClass* PASCAL FromName(LPCSTR lpszClassName);

static CRuntimeClass* PASCAL FromName(LPCWSTR lpszClassName);

パラメーター

lpszClassName
CObjectから派生したクラスの使い慣れた名前。

戻り値

CRuntimeClass オブジェクトへのポインター。lpszClassName で渡される名前に対応します。 一致するクラス名が見つからなかった場合、この関数は NULL を返します。

// This example creates an object if CAge is defined.

CRuntimeClass* pClass = CRuntimeClass::FromName(_T("CAge"));
if (pClass == NULL)
{
   // not found, display a warning for diagnostic purposes
   AfxMessageBox(_T("Warning: CMyClass not defined"));
   return NULL;
}

// attempt to create the object with the found CRuntimeClass
CObject* pObject = pClass->CreateObject();

CRuntimeClass::IsDerivedFrom

この関数を呼び出して、呼び出し元のクラスが pBaseClass パラメーターで指定されたクラスから派生しているかどうかを判断します。

BOOL IsDerivedFrom(const CRuntimeClass* pBaseClass) const;

パラメーター

pBaseClass
CObjectから派生したクラスの使い慣れた名前。

戻り値

IsDerivedFromを呼び出すクラスが、CRuntimeClass構造体がパラメーターとして指定されている基底クラスから派生している場合は TRUE。それ以外の場合は FALSE。

解説

リレーションシップは、メンバーのクラスから派生クラスのチェーンを上に至るまで "歩く" ことを決定します。 この関数は、基底クラスに一致するものが見つからない場合にのみ FALSE を返します。

Note

CRuntimeClass構造体を使用するには、実行時オブジェクト情報を取得するクラスの実装に、IMPLEMENT_DYNAMIC、IMPLEMENT_DYNCREATE、またはIMPLEMENT_SERIALマクロを含める必要があります。

CRuntimeClassの使用方法の詳細については、「CObject クラス: ランタイム クラス情報へのアクセス」を参照してください。

// This example creates an object from the run-time class. It only 
// creates objects derived from CWnd.

// We only want to create an object derived from CWnd.
if (!pClass->IsDerivedFrom(RUNTIME_CLASS(CWnd)))
{
   TRACE(_T("Error; Object %s is not derived from CWnd\n"),
      pClass->m_lpszClassName);
   return FALSE;
}

// Get a pointer to the base class CRuntimeClass.
#ifdef _AFXDLL
CRuntimeClass* pBaseClass = pClass->m_pfnGetBaseClass();
#else
CRuntimeClass* pBaseClass = pClass->m_pBaseClass;
#endif
ASSERT(pBaseClass != NULL);

TRACE("Creating object %s derived from %s, with object size %d "
   "and schema %d\n", pClass->m_lpszClassName,
   pBaseClass->m_lpszClassName, pClass->m_nObjectSize,
   pClass->m_wSchema);

// Create the object.
CObject* pObject = pClass->CreateObject();

CRuntimeClass::m_lpszClassName

ASCII クラス名を含む null で終わる文字列。

解説

この名前は、 FromName メンバー関数を使用してクラスのインスタンスを作成するために使用できます。

IsDerivedFrom の例を参照してください。

CRuntimeClass::m_nObjectSize

オブジェクトのサイズ (バイト単位)。

解説

割り当てられたメモリを指すデータ メンバーがオブジェクトにある場合、そのメモリのサイズは含まれません。

IsDerivedFrom の例を参照してください。

CRuntimeClass::m_pBaseClass

アプリケーションが MFC に静的にリンクしている場合、このデータ メンバーには基底クラスの CRuntimeClass 構造体へのポインターが含まれます。

解説

アプリケーションが MFC ライブラリに動的にリンクしている場合は、 m_pfnGetBaseClassを参照してください。

IsDerivedFrom の例を参照してください。

CRuntimeClass::m_pfnCreateObject

クラスのオブジェクトを作成する既定のコンストラクターへの関数ポインター。

解説

このポインターは、クラスが動的な作成をサポートしている場合にのみ有効です。それ以外の場合、関数は NULL を返します。

CRuntimeClass::m_pfnGetBaseClass

アプリケーションで MFC ライブラリを共有 DLL として使用する場合、このデータ メンバーは基底クラスの CRuntimeClass 構造体を返す関数を指します。

解説

アプリケーションが MFC ライブラリに静的にリンクしている場合は、 m_pBaseClassを参照してください。

IsDerivedFrom の例を参照してください。

CRuntimeClass::m_wSchema

スキーマ番号 ( -1 for nonserializable classes).

解説

スキーマ番号の詳細については、 IMPLEMENT_SERIAL マクロを参照してください。

IsDerivedFrom の例を参照してください。

関連項目

階層図
CObject::GetRuntimeClass
CObject::IsKindOf
RUNTIME_CLASS
IMPLEMENT_DYNAMIC
IMPLEMENT_DYNCREATE
IMPLEMENT_SERIAL