CRuntimeClass – struktura
Každá třída odvozená od CObject
je přidružena ke CRuntimeClass
struktuře, kterou můžete použít k získání informací o objektu nebo její základní třídě za běhu.
Syntaxe
struct CRuntimeClass
Členové
Veřejné metody
Název | Popis |
---|---|
CRuntimeClass::CreateObject | Vytvoří objekt během běhu. |
CRuntimeClass::FromName | Vytvoří objekt během běhu pomocí známého názvu třídy. |
CRuntimeClass::IsDerivedFrom | Určuje, zda je třída odvozena ze zadané třídy. |
Veřejné datové členy
Název | Popis |
---|---|
CRuntimeClass::m_lpszClassName | Název třídy |
CRuntimeClass::m_nObjectSize | Velikost objektu v bajtech. |
CRuntimeClass::m_pBaseClass | Ukazatel na CRuntimeClass strukturu základní třídy. |
CRuntimeClass::m_pfnCreateObject | Ukazatel na funkci, která dynamicky vytváří objekt. |
CRuntimeClass::m_pfnGetBaseClass | CRuntimeClass Vrátí strukturu (k dispozici pouze při dynamickém propojení). |
CRuntimeClass::m_wSchema | Číslo schématu třídy. |
Poznámky
CRuntimeClass
je struktura, a proto nemá základní třídu.
Schopnost určit třídu objektu za běhu je užitečná v případě, že je potřeba provést další kontrolu typů argumentů funkce nebo když je nutné napsat speciální účelový kód založený na třídě objektu. Informace o třídě runtime nejsou podporovány přímo jazykem C++.
CRuntimeClass
poskytuje informace o souvisejícím objektu C++, například ukazatel na CRuntimeClass
základní třídu a název třídy ASCII související třídy. Tato struktura také implementuje různé funkce, které lze použít k dynamickému vytváření objektů, určení typu objektu pomocí známého názvu a určení, zda související třída je odvozena z konkrétní třídy.
Další informace o použití CRuntimeClass
naleznete v článku Přístup k informacím o třídě runtime.
Hierarchie dědičnosti
CRuntimeClass
Požadavky
Hlavička: afx.h
CRuntimeClass::CreateObject
Voláním této funkce dynamicky vytvoříte zadanou třídu během běhu.
CObject* CreateObject();
static CObject* PASCAL CreateObject(LPCSTR lpszClassName);
static CObject* PASCAL CreateObject(LPCWSTR lpszClassName);
Parametry
lpszClassName
Známý název třídy, která se má vytvořit.
Návratová hodnota
Ukazatel na nově vytvořený objekt nebo NULL, pokud název třídy nebyl nalezen nebo není dostatek paměti k vytvoření objektu.
Poznámky
Třídy odvozené z CObject
mohou podporovat dynamické vytváření, což je schopnost vytvořit objekt zadané třídy za běhu. Třídy dokumentů, zobrazení a snímků by například měly podporovat dynamické vytváření. Další informace o dynamickém vytváření a členu CreateObject
naleznete v tématu CObject Class and CObject Class: Specifying Levels of Functionality.
Příklad
Podívejte se na příklad pro IsDerivedFrom.
CRuntimeClass::FromName
Voláním této funkce načtěte CRuntimeClass
strukturu přidruženou k známému názvu.
static CRuntimeClass* PASCAL FromName(LPCSTR lpszClassName);
static CRuntimeClass* PASCAL FromName(LPCWSTR lpszClassName);
Parametry
lpszClassName
Známý název třídy odvozené od CObject
.
Návratová hodnota
Ukazatel na CRuntimeClass
objekt, který odpovídá názvu předaného v lpszClassName. Funkce vrátí hodnotu NULL, pokud nebyl nalezen žádný odpovídající název třídy.
Příklad
// 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
Voláním této funkce určíte, zda volající třída je odvozena z třídy zadané v parametru pBaseClass .
BOOL IsDerivedFrom(const CRuntimeClass* pBaseClass) const;
Parametry
pBaseClass
Známý název třídy odvozené od CObject
.
Návratová hodnota
TRUE, pokud volání IsDerivedFrom
třídy je odvozeno ze základní třídy, jejíž CRuntimeClass
struktura je uvedena jako parametr; jinak FALSE.
Poznámky
Relace je určena "chůze" z třídy člena nahoru řetězec odvozených tříd až do horní části. Tato funkce vrátí hodnotu FALSE pouze v případě, že se pro základní třídu nenajde žádná shoda.
Poznámka:
Chcete-li použít CRuntimeClass
strukturu, musíte zahrnout IMPLEMENT_DYNAMIC, IMPLEMENT_DYNCREATE nebo IMPLEMENT_SERIAL makro v implementaci třídy, pro kterou chcete načíst informace o objektu za běhu.
Další informace o použití CRuntimeClass
naleznete v článku CObject Třída: Přístup k informacím třídy Runtime.
Příklad
// 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
Řetězec ukončený hodnotou null obsahující název třídy ASCII.
Poznámky
Tento název lze použít k vytvoření instance třídy pomocí FromName
členské funkce.
Příklad
Podívejte se na příklad pro IsDerivedFrom.
CRuntimeClass::m_nObjectSize
Velikost objektu v bajtech.
Poznámky
Pokud má objekt datové členy, které odkazují na přidělenou paměť, velikost této paměti není zahrnuta.
Příklad
Podívejte se na příklad pro IsDerivedFrom.
CRuntimeClass::m_pBaseClass
Pokud aplikace staticky odkazuje na mfc, tento datový člen obsahuje ukazatel na CRuntimeClass
strukturu základní třídy.
Poznámky
Pokud aplikace dynamicky odkazuje na knihovnu MFC, přečtěte si m_pfnGetBaseClass.
Příklad
Podívejte se na příklad pro IsDerivedFrom.
CRuntimeClass::m_pfnCreateObject
Ukazatel funkce na výchozí konstruktor, který vytvoří objekt vaší třídy.
Poznámky
Tento ukazatel je platný pouze v případě, že třída podporuje dynamické vytváření; v opačném případě funkce vrátí hodnotu NULL.
CRuntimeClass::m_pfnGetBaseClass
Pokud vaše aplikace používá knihovnu MFC jako sdílenou knihovnu DLL, tento datový člen odkazuje na funkci, která vrací CRuntimeClass
strukturu základní třídy.
Poznámky
Pokud vaše aplikace staticky odkazuje na knihovnu MFC, přečtěte si m_pBaseClass.
Příklad
Podívejte se na příklad pro IsDerivedFrom.
CRuntimeClass::m_wSchema
Číslo schématu ( -1 pro nonserializable třídy).
Poznámky
Další informace o číslech schématu najdete v IMPLEMENT_SERIAL makrech.
Příklad
Podívejte se na příklad pro IsDerivedFrom.
Viz také
Graf hierarchie
CObject::GetRuntimeClass
Objekt CObject::IsKindOf
RUNTIME_CLASS
IMPLEMENT_DYNAMIC
IMPLEMENT_DYNCREATE
IMPLEMENT_SERIAL