CRuntimeClass::IsDerivedFrom
更新 : 2007 年 11 月
呼び出し側のクラスが pBaseClass パラメータで指定されているクラスから派生したクラスかどうかを調べます。
BOOL IsDerivedFrom(
const CRuntimeClass* pBaseClass
) const;
パラメータ
- pBaseClass
CObject から派生したクラスの既知の名前。
戻り値
IsDerivedFrom を呼び出すクラスが、CRuntimeClass 構造体をパラメータとして渡す基本クラスから派生している場合は、TRUE を返します。そうでない場合は FALSE を返します。
解説
リレーションシップは、メンバのクラスから派生クラスの最上位まで "さかのぼって" 判断されます。基本クラスが一致しない場合にだけ FALSE を返します。
メモ : |
---|
CRuntimeClass 構造体を使用するには、実行時にオブジェクト情報を取得するクラスの実装に IMPLEMENT_DYNAMIC、IMPLEMENT_DYNCREATE、IMPLEMENT_SERIAL のいずれかのマクロを含める必要があります。 |
CRuntimeClass の使い方の詳細については、「ランタイム クラス情報へのアクセス方法」を参照してください。
使用例
// 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();
必要条件
ヘッダー : afx.h