Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of mappen te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen om mappen te wijzigen.
Opmerking
De Microsoft Foundation Classes-bibliotheek (MFC) wordt nog steeds ondersteund. We voegen echter geen functies meer toe of werken de documentatie bij.
Elke klasse die is afgeleid van CObject , is gekoppeld aan een CRuntimeClass structuur die u kunt gebruiken om informatie te verkrijgen over een object of de basisklasse ervan tijdens runtime.
Syntaxis
struct CRuntimeClass
Leden
Openbare methoden
| Naam | Description |
|---|---|
| CRuntimeClass::CreateObject | Hiermee maakt u een object tijdens runtime. |
| CRuntimeClass::FromName | Hiermee maakt u een object tijdens runtime met behulp van de vertrouwde klassenaam. |
| CRuntimeClass::IsDerivedFrom | Bepaalt of de klasse is afgeleid van de opgegeven klasse. |
Leden van openbare gegevens
| Naam | Description |
|---|---|
| CRuntimeClass::m_lpszClassName | De naam van de klas. |
| CRuntimeClass::m_nObjectSize | De grootte van het object in bytes. |
| CRuntimeClass::m_pBaseClass | Een aanwijzer naar de CRuntimeClass structuur van de basisklasse. |
| CRuntimeClass::m_pfnCreateObject | Een aanwijzer naar de functie waarmee het object dynamisch wordt gemaakt. |
| CRuntimeClass::m_pfnGetBaseClass | Retourneert de CRuntimeClass structuur (alleen beschikbaar wanneer deze dynamisch is gekoppeld). |
| CRuntimeClass::m_wSchema | Het schemanummer van de klasse. |
Opmerkingen
CRuntimeClass is een structuur en heeft daarom geen basisklasse.
De mogelijkheid om de klasse van een object tijdens runtime te bepalen, is handig wanneer extra type controle van functieargumenten nodig is of wanneer u speciale code moet schrijven op basis van de klasse van een object. Runtimeklassegegevens worden niet rechtstreeks ondersteund door de C++-taal.
CRuntimeClass bevat informatie over het gerelateerde C++-object, zoals een aanwijzer naar de CRuntimeClass basisklasse en de ASCII-klassenaam van de gerelateerde klasse. Deze structuur implementeert ook verschillende functies die kunnen worden gebruikt voor het dynamisch maken van objecten, het opgeven van het type object met behulp van een vertrouwde naam en het bepalen of de gerelateerde klasse is afgeleid van een specifieke klasse.
Zie het artikel Toegang tot Run-Time Klasse-informatie voor meer informatie over het gebruikCRuntimeClass.
Overnamehiërarchie
CRuntimeClass
Requirements
koptekst: afx.h
CRuntimeClass::CreateObject
Roep deze functie aan om de opgegeven klasse dynamisch te maken tijdens de runtime.
CObject* CreateObject();
static CObject* PASCAL CreateObject(LPCSTR lpszClassName);
static CObject* PASCAL CreateObject(LPCWSTR lpszClassName);
Parameterwaarden
lpszClassName
De vertrouwde naam van de klasse die moet worden gemaakt.
Retourwaarde
Een aanwijzer naar het zojuist gemaakte object of NULL als de klassenaam niet wordt gevonden of er onvoldoende geheugen is om het object te maken.
Opmerkingen
Klassen die zijn afgeleid van CObject kunnen dynamische creatie ondersteunen. Dit is de mogelijkheid om tijdens runtime een object van een opgegeven klasse te maken. Document-, weergave- en frameklassen moeten bijvoorbeeld ondersteuning bieden voor dynamisch maken. Zie CObject Class en CObject Class: Specifying Levels of Functionality voor meer informatie over dynamisch maken en het CreateObject lid.
Example
Zie het voorbeeld voor IsDerivedFrom.
CRuntimeClass::FromName
Roep deze functie aan om de CRuntimeClass structuur op te halen die is gekoppeld aan de vertrouwde naam.
static CRuntimeClass* PASCAL FromName(LPCSTR lpszClassName);
static CRuntimeClass* PASCAL FromName(LPCWSTR lpszClassName);
Parameterwaarden
lpszClassName
De bekende naam van een klasse die is afgeleid van CObject.
Retourwaarde
Een aanwijzer naar een CRuntimeClass object, die overeenkomt met de naam die is doorgegeven in lpszClassName. De functie retourneert NULL als er geen overeenkomende klassenaam is gevonden.
Example
// 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
Roep deze functie aan om te bepalen of de aanroepende klasse is afgeleid van de klasse die is opgegeven in de parameter pBaseClass .
BOOL IsDerivedFrom(const CRuntimeClass* pBaseClass) const;
Parameterwaarden
pBaseClass
De bekende naam van een klasse die is afgeleid van CObject.
Retourwaarde
WAAR als de klasse-aanroep IsDerivedFrom is afgeleid van de basisklasse waarvan CRuntimeClass de structuur wordt opgegeven als een parameter; anders ONWAAR.
Opmerkingen
De relatie wordt bepaald door 'lopen' van de klasse van het lid tot de keten van afgeleide klassen helemaal tot aan de bovenkant. Deze functie retourneert alleen FALSE als er geen overeenkomst wordt gevonden voor de basisklasse.
Opmerking
Als u de CRuntimeClass structuur wilt gebruiken, moet u de IMPLEMENT_DYNAMIC, IMPLEMENT_DYNCREATE of IMPLEMENT_SERIAL macro opnemen in de implementatie van de klasse waarvoor u runtime-objectgegevens wilt ophalen.
Zie het artikel CObject Class: Accessing Run-Time Class Information voor meer informatie over het gebruikCRuntimeClass.
Example
// 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
Een door null beëindigde tekenreeks met de naam van de ASCII-klasse.
Opmerkingen
Deze naam kan worden gebruikt om een exemplaar van de klasse te maken met behulp van de FromName lidfunctie.
Example
Zie het voorbeeld voor IsDerivedFrom.
CRuntimeClass::m_nObjectSize
De grootte van het object, in bytes.
Opmerkingen
Als het object gegevensleden bevat die verwijzen naar toegewezen geheugen, wordt de grootte van dat geheugen niet opgenomen.
Example
Zie het voorbeeld voor IsDerivedFrom.
CRuntimeClass::m_pBaseClass
Als uw toepassing statisch is gekoppeld aan MFC, bevat dit gegevenslid een aanwijzer naar de CRuntimeClass structuur van de basisklasse.
Opmerkingen
Als uw toepassing dynamisch is gekoppeld aan de MFC-bibliotheek, raadpleegt u m_pfnGetBaseClass.
Example
Zie het voorbeeld voor IsDerivedFrom.
CRuntimeClass::m_pfnCreateObject
Een functieaanwijzer naar de standaardconstructor waarmee een object van uw klasse wordt gemaakt.
Opmerkingen
Deze aanwijzer is alleen geldig als de klasse dynamische creatie ondersteunt; anders retourneert de functie NULL.
CRuntimeClass::m_pfnGetBaseClass
Als uw toepassing de MFC-bibliotheek als gedeelde DLL gebruikt, verwijst dit gegevenslid naar een functie die de CRuntimeClass structuur van de basisklasse retourneert.
Opmerkingen
Als uw toepassing statisch is gekoppeld aan de MFC-bibliotheek, raadpleegt u m_pBaseClass.
Example
Zie het voorbeeld voor IsDerivedFrom.
CRuntimeClass::m_wSchema
Het schemanummer (-1 voor niet-beserialiseerde klassen).
Opmerkingen
Zie de IMPLEMENT_SERIAL macro voor meer informatie over schemanummers.
Example
Zie het voorbeeld voor IsDerivedFrom.
Zie ook
Hiërarchiegrafiek
CObject::GetRuntimeClass
CObject::IsKindOf
RUNTIME_CLASS
IMPLEMENT_DYNAMIC
IMPLEMENT_DYNCREATE
IMPLEMENT_SERIAL