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
派生したクラスの使い慣れた名前。
戻り値
lpszClassName で渡される名前に対応するオブジェクトへのCRuntimeClass
ポインター。 一致するクラス名が見つからなかった場合、この関数は 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。それ以外の場合は FAL Standard Edition。
解説
リレーションシップは、メンバーのクラスから派生クラスのチェーンを上に至るまで "歩く" ことを決定します。 この関数はStandard Edition基底クラスに一致するものが見つからない場合にのみ FAL を返します。
Note
構造体をCRuntimeClass
使用するには、ランタイム オブジェクト情報を取得するクラスの実装に、IMPLEMENT_DYNAMIC、IMPLEMENT_DYNCREATE、または IMPLEMENT_Standard Edition RIAL マクロを含める必要があります。
使用方法 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_Standard Edition RIAL マクロを参照してください。
例
IsDerivedFrom の例を参照してください。
関連項目
階層図
CObject::GetRuntimeClass
CObject::IsKindOf
RUNTIME_CLASS
IMPLEMENT_DYNAMIC
IMPLEMENT_DYNCREATE
IMPLEMENT_Standard Edition RIAL
フィードバック
https://aka.ms/ContentUserFeedback」を参照してください。
以下は間もなく提供いたします。2024 年を通じて、コンテンツのフィードバック メカニズムとして GitHub の issue を段階的に廃止し、新しいフィードバック システムに置き換えます。 詳細については、「フィードバックの送信と表示