CRuntimeClass (estructura)
Cada clase derivada de CObject
está asociada a una estructura CRuntimeClass
que puede usar para obtener información sobre un objeto o su clase base en tiempo de ejecución.
Sintaxis
struct CRuntimeClass
Miembros
Métodos públicos
Nombre | Descripción |
---|---|
CRuntimeClass::CreateObject | Crea un objeto durante el tiempo de ejecución. |
CRuntimeClass::FromName | Crea un objeto durante el tiempo de ejecución con el nombre de clase conocido. |
CRuntimeClass::IsDerivedFrom | Determina si la clase se deriva de la clase especificada. |
Miembros de datos públicos
Nombre | Descripción |
---|---|
CRuntimeClass::m_lpszClassName | Nombre de la clase. |
CRuntimeClass::m_nObjectSize | Tamaño del objeto en bytes. |
CRuntimeClass::m_pBaseClass | Puntero a la estructura CRuntimeClass de la clase base. |
CRuntimeClass::m_pfnCreateObject | Puntero a la función que crea dinámicamente el objeto. |
CRuntimeClass::m_pfnGetBaseClass | Devuelve la estructura CRuntimeClass (solo disponible cuando está vinculada dinámicamente). |
CRuntimeClass::m_wSchema | Número de esquema de la clase. |
Comentarios
CRuntimeClass
es una estructura y, por tanto, no tiene una clase base.
La capacidad de determinar la clase de un objeto en tiempo de ejecución resulta útil cuando se necesita una comprobación de tipos adicional de argumentos de función o cuando se debe escribir código con una finalidad especial basado en la clase de un objeto. La información de clases en tiempo de ejecución no es compatible directamente con el lenguaje C++.
CRuntimeClass
proporciona información sobre el objeto C++ relacionado, como un puntero a de la clase base CRuntimeClass
y el nombre de clase ASCII de la clase relacionada. Esta estructura también implementa varias funciones que se pueden usar para crear objetos dinámicamente, especificar el tipo de objeto mediante un nombre conocido y determinar si la clase relacionada se deriva de una clase específica.
Para obtener más información sobre el uso de CRuntimeClass
, consulte el artículo Acceso a la información de clases en tiempo de ejecución.
Jerarquía de herencia
CRuntimeClass
Requisitos
Encabezado: afx.h
CRuntimeClass::CreateObject
Llame a esta función para crear dinámicamente la clase especificada durante el tiempo de ejecución.
CObject* CreateObject();
static CObject* PASCAL CreateObject(LPCSTR lpszClassName);
static CObject* PASCAL CreateObject(LPCWSTR lpszClassName);
Parámetros
lpszClassName
Nombre conocido de la clase que se va a crear.
Valor devuelto
Puntero al objeto recién creado o NULL si no se encuentra el nombre de clase o si no hay memoria suficiente para crear el objeto.
Comentarios
Las clases derivadas de CObject
pueden admitir la creación dinámica, que es la capacidad de crear un objeto de una clase específica en tiempo de ejecución. Las clases document, view y frame, por ejemplo, deben admitir la creación dinámica. Para obtener más información sobre la creación dinámica y el miembro CreateObject
, consulte Clase CObject y Clase CObject: Especificar los niveles de funcionalidad.
Ejemplo
Vea el ejemplo de IsDerivedFrom.
CRuntimeClass::FromName
Llame a esta función para recuperar la estructura CRuntimeClass
asociada al nombre conocido.
static CRuntimeClass* PASCAL FromName(LPCSTR lpszClassName);
static CRuntimeClass* PASCAL FromName(LPCWSTR lpszClassName);
Parámetros
lpszClassName
Nombre conocido de una clase derivada de CObject
.
Valor devuelto
Puntero a un objeto CRuntimeClass
, correspondiente al nombre que se pasa en lpszClassName. La función devuelve NULL si no se encontró ningún nombre de clase coincidente.
Ejemplo
// 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
Llame a esta función para determinar si la clase de llamada se deriva de la clase especificada en el parámetro pBaseClass.
BOOL IsDerivedFrom(const CRuntimeClass* pBaseClass) const;
Parámetros
pBaseClass
Nombre conocido de una clase derivada de CObject
.
Valor devuelto
TRUE si la clase que llama a IsDerivedFrom
se deriva de la clase base cuya estructura CRuntimeClass
se da como parámetro; de lo contrario, FALSE.
Comentarios
La relación se determina "caminando" desde la clase del miembro a la cadena de clases derivadas hasta llegar a la parte superior. Esta función solo devuelve FALSE si no se encuentra ninguna coincidencia para la clase base.
Nota:
Para usar la estructura CRuntimeClass
, debe incluir la macro IMPLEMENT_DYNAMIC, IMPLEMENT_DYNCREATE o IMPLEMENT_SERIAL en la implementación de la clase para la que desea recuperar la información del objeto en tiempo de ejecución.
Para obtener más información sobre el uso de CRuntimeClass
, consulte el artículo Clase CObject: Acceso a la información de clases en tiempo de ejecución.
Ejemplo
// 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
Cadena terminada en un valor NULL que contiene el nombre de clase ASCII.
Comentarios
Este nombre se puede usar para crear una instancia de la clase mediante la función miembro FromName
.
Ejemplo
Vea el ejemplo de IsDerivedFrom.
CRuntimeClass::m_nObjectSize
Tamaño del objeto en bytes.
Comentarios
Si el objeto tiene miembros de datos que apuntan a la memoria asignada, no se incluye el tamaño de esa memoria.
Ejemplo
Vea el ejemplo de IsDerivedFrom.
CRuntimeClass::m_pBaseClass
Si la aplicación se vincula estáticamente a MFC, este miembro de datos contiene un puntero a la estructura CRuntimeClass
de la clase base.
Comentarios
Si la aplicación se vincula dinámicamente con la biblioteca MFC, consulte m_pfnGetBaseClass.
Ejemplo
Vea el ejemplo de IsDerivedFrom.
CRuntimeClass::m_pfnCreateObject
Puntero de función al constructor predeterminado que crea un objeto de la clase.
Comentarios
Este puntero solo es válido si la clase admite la creación dinámica; de lo contrario, la función devuelve NULL.
CRuntimeClass::m_pfnGetBaseClass
Si la aplicación usa la biblioteca MFC como un archivo DLL compartido, este miembro de datos apunta a una función que devuelve la estructura CRuntimeClass
de la clase base.
Comentarios
Si la aplicación se vincula estáticamente con la biblioteca MFC, consulte m_pBaseClass.
Ejemplo
Vea el ejemplo de IsDerivedFrom.
CRuntimeClass::m_wSchema
Número de esquema (-1 para clases no serializables).
Comentarios
Para obtener más información sobre los números de esquema, vea la macro IMPLEMENT_SERIAL.
Ejemplo
Vea el ejemplo de IsDerivedFrom.
Consulte también
Gráfico de jerarquías
CObject::GetRuntimeClass
CObject::IsKindOf
RUNTIME_CLASS
IMPLEMENT_DYNAMIC
IMPLEMENT_DYNCREATE
IMPLEMENT_SERIAL