Struttura CRuntimeClass

Ogni classe derivata da CObject è associata a una CRuntimeClass struttura che è possibile usare per ottenere informazioni su un oggetto o sulla relativa classe di base in fase di esecuzione.

Sintassi

struct CRuntimeClass

Membri

Metodi pubblici

Nome Descrizione
CRuntimeClass::CreateObject Crea un oggetto durante l'esecuzione.
CRuntimeClass::FromName Crea un oggetto durante l'esecuzione usando il nome della classe familiare.
CRuntimeClass::IsDerivedFrom Determina se la classe è derivata dalla classe specificata.

Membri dati pubblici

Nome Descrizione
CRuntimeClass::m_lpszClassName Nome della classe.
CRuntimeClass::m_nObjectSize Dimensione dell'oggetto in byte.
CRuntimeClass::m_pBaseClass Puntatore alla CRuntimeClass struttura della classe di base.
CRuntimeClass::m_pfnCreateObject Puntatore alla funzione che crea dinamicamente l'oggetto .
CRuntimeClass::m_pfnGetBaseClass Restituisce la CRuntimeClass struttura ,disponibile solo quando è collegato dinamicamente.
CRuntimeClass::m_wSchema Numero di schema della classe .

Osservazioni:

CRuntimeClass è una struttura e pertanto non dispone di una classe di base.

La possibilità di determinare la classe di un oggetto in fase di esecuzione è utile quando è necessario un controllo aggiuntivo dei tipi degli argomenti della funzione o quando è necessario scrivere codice speciale in base alla classe di un oggetto . Le informazioni sulle classi di runtime non sono supportate direttamente dal linguaggio C++.

CRuntimeClass fornisce informazioni sull'oggetto C++ correlato, ad esempio un puntatore alla CRuntimeClass classe di base e al nome della classe ASCII della classe correlata. Questa struttura implementa anche varie funzioni che possono essere usate per creare oggetti in modo dinamico, specificando il tipo di oggetto usando un nome familiare e determinando se la classe correlata è derivata da una classe specifica.

Per altre informazioni sull'uso CRuntimeClassdi , vedere l'articolo Accesso alle informazioni sulle classi di runtime.

Gerarchia di ereditarietà

CRuntimeClass

Requisiti

Intestazione: afx.h

CRuntimeClass::CreateObject

Chiamare questa funzione per creare dinamicamente la classe specificata durante l'esecuzione.

CObject* CreateObject();

static CObject* PASCAL CreateObject(LPCSTR lpszClassName);

static CObject* PASCAL CreateObject(LPCWSTR lpszClassName);

Parametri

lpszClassName
Nome familiare della classe da creare.

Valore restituito

Puntatore all'oggetto appena creato o NULL se il nome della classe non viene trovato o se non è disponibile memoria insufficiente per creare l'oggetto.

Osservazioni:

Le classi derivate da CObject possono supportare la creazione dinamica, ovvero la possibilità di creare un oggetto di una classe specificata in fase di esecuzione. Le classi document, view e frame, ad esempio, devono supportare la creazione dinamica. Per altre informazioni sulla creazione dinamica e sul CreateObject membro, vedere Classe CObject e Classe CObject: Specifica dei livelli di funzionalità.

Esempio

Vedere l'esempio per IsDerivedFrom.

CRuntimeClass::FromName

Chiamare questa funzione per recuperare la CRuntimeClass struttura associata al nome familiare.

static CRuntimeClass* PASCAL FromName(LPCSTR lpszClassName);

static CRuntimeClass* PASCAL FromName(LPCWSTR lpszClassName);

Parametri

lpszClassName
Nome familiare di una classe derivata da CObject.

Valore restituito

Puntatore a un CRuntimeClass oggetto, corrispondente al nome passato in lpszClassName. La funzione restituisce NULL se non è stato trovato alcun nome di classe corrispondente.

Esempio

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

Chiamare questa funzione per determinare se la classe chiamante è derivata dalla classe specificata nel parametro pBaseClass .

BOOL IsDerivedFrom(const CRuntimeClass* pBaseClass) const;

Parametri

pBaseClass
Nome familiare di una classe derivata da CObject.

Valore restituito

TRUE se la classe chiamante IsDerivedFrom è derivata dalla classe base la cui CRuntimeClass struttura viene specificata come parametro; in caso contrario, FALSE.

Osservazioni:

La relazione è determinata dalla "passeggiata" dalla classe del membro fino alla catena di classi derivate fino alla parte superiore. Questa funzione restituisce FALSE solo se non viene trovata alcuna corrispondenza per la classe base.

Nota

Per utilizzare la CRuntimeClass struttura, è necessario includere la macro IMPLEMENT_DYNAMIC, IMPLEMENT_DYNCREATE o IMPLEMENT_SERIAL nell'implementazione della classe per cui si desidera recuperare le informazioni sull'oggetto di runtime.

Per altre informazioni sull'uso CRuntimeClassdi , vedere l'articolo Classe CObject: Accesso alle informazioni sulle classi di runtime.

Esempio

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

Stringa con terminazione Null contenente il nome della classe ASCII.

Osservazioni:

Questo nome può essere usato per creare un'istanza della classe usando la FromName funzione membro.

Esempio

Vedere l'esempio per IsDerivedFrom.

CRuntimeClass::m_nObjectSize

Dimensione dell'oggetto, in byte.

Osservazioni:

Se l'oggetto dispone di membri dati che puntano alla memoria allocata, la dimensione di tale memoria non è inclusa.

Esempio

Vedere l'esempio per IsDerivedFrom.

CRuntimeClass::m_pBaseClass

Se l'applicazione si collega in modo statico a MFC, questo membro dati contiene un puntatore alla CRuntimeClass struttura della classe di base.

Osservazioni:

Se l'applicazione si collega dinamicamente alla libreria MFC, vedere m_pfnGetBaseClass.

Esempio

Vedere l'esempio per IsDerivedFrom.

CRuntimeClass::m_pfnCreateObject

Puntatore di funzione al costruttore predefinito che crea un oggetto della classe.

Osservazioni:

Questo puntatore è valido solo se la classe supporta la creazione dinamica; in caso contrario, la funzione restituisce NULL.

CRuntimeClass::m_pfnGetBaseClass

Se l'applicazione usa la libreria MFC come DLL condivisa, questo membro dati punta a una funzione che restituisce la CRuntimeClass struttura della classe di base.

Osservazioni:

Se l'applicazione collega in modo statico alla libreria MFC, vedere m_pBaseClass.

Esempio

Vedere l'esempio per IsDerivedFrom.

CRuntimeClass::m_wSchema

Numero di schema ( -1 per le classi nonerializzabili).

Osservazioni:

Per altre informazioni sui numeri di schema, vedere la macro IMPLEMENT_SERIAL .

Esempio

Vedere l'esempio per IsDerivedFrom.

Vedi anche

Grafico della gerarchia
CObject::GetRuntimeClass
CObject::IsKindOf
RUNTIME_CLASS
IMPLEMENT_DYNAMIC
IMPLEMENT_DYNCREATE
IMPLEMENT_SERIAL