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 CRuntimeClass
di , 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 CRuntimeClass
di , 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