Compartir a través de


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