Sdílet prostřednictvím


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í CRuntimeClassnaleznete 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í CRuntimeClassnaleznete 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