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 提供有关相关 c + + 对象的信息,例如指向 CRuntimeClass 基类的的指针和相关类的 ASCII 类名。 此结构还实现了各种函数,这些函数可用于动态创建对象、使用熟悉的名称指定对象的类型,以及确定相关类是否派生自特定的类。

有关使用的详细信息 CRuntimeClass ,请参阅 访问 Run-Time 类信息的文章。

继承层次结构

CRuntimeClass

要求

标头: afx

CRuntimeClass:: CreateObject

调用此函数可在运行时动态创建指定的类。

CObject* CreateObject();

static CObject* PASCAL CreateObject(LPCSTR lpszClassName);

static CObject* PASCAL CreateObject(LPCWSTR lpszClassName);

parameters

lpszClassName
要创建的类的熟悉名称。

返回值

指向新创建的对象的指针; 如果找不到类名或内存不足,无法创建该对象,则为 NULL。

备注

派生自的类 CObject 可以支持动态创建,这是在运行时创建指定类的对象的功能。 例如,文档、视图和框架类应支持动态创建。 有关动态创建和成员的详细信息 CreateObject ,请参阅 cobject 类Cobject 类:指定功能级别

示例

请参阅 IsDerivedFrom的示例。

CRuntimeClass:: FromName

调用此函数可检索 CRuntimeClass 与熟悉名称关联的结构。

static CRuntimeClass* PASCAL FromName(LPCSTR lpszClassName);

static CRuntimeClass* PASCAL FromName(LPCWSTR lpszClassName);

parameters

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;

parameters

pBaseClass
派生自的类的熟悉名称 CObject

返回值

如果调用的类 IsDerivedFrom 派生自其结构被指定为参数的基类,则为 TRUE CRuntimeClass ; 否则为 FALSE。

备注

关系由从成员的类 "遍历" 到从派生类的链一直到顶部。 仅当找不到基类的匹配项时,此函数才返回 FALSE。

备注

若要使用 CRuntimeClass 结构,必须在要为其检索运行时对象信息的类的实现中包含 IMPLEMENT_DYNAMIC、IMPLEMENT_DYNCREATE 或 IMPLEMENT_SERIAL 宏。

有关使用的详细信息 CRuntimeClass ,请参阅 CObject 类:访问 Run-Time 类信息一文。

示例

// 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

一个以 null 结尾的字符串,其中包含 ASCII 类名。

备注

此名称可用于通过成员函数创建类的实例 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。

备注

有关架构号的详细信息,请参阅 IMPLEMENT_SERIAL 宏。

示例

请参阅 IsDerivedFrom的示例。

请参阅

层次结构图
CObject:: GetRuntimeClass
CObject:: IsKindOf
RUNTIME_CLASS
IMPLEMENT_DYNAMIC
IMPLEMENT_DYNCREATE
IMPLEMENT_SERIAL