Přetypování objektů tříd MFC
Makra přetypování typů poskytují způsob, jak přetypovat daný ukazatel na ukazatel, který odkazuje na objekt konkrétní třídy, s kontrolou, zda je přetypování legální.
Následující tabulka uvádí makra přetypování typů MFC.
Makra, která přetypují ukazatele na objekty tříd MFC
Název | Popis |
---|---|
DYNAMIC_DOWNCAST | Při kontrole, zda je přetypování legální, přetypuje ukazatel na objekt třídy. |
STATIC_DOWNCAST | Přetypuje ukazatel na objekt z jedné třídy na ukazatel souvisejícího typu. V sestavení ladění způsobí ASSERT, pokud objekt není "druh" cílového typu. |
DYNAMIC_DOWNCAST
Poskytuje praktický způsob, jak přetypovat ukazatel na ukazatel na objekt třídy při kontrole, zda je přetypování legální.
DYNAMIC_DOWNCAST(class, pointer)
Parametry
class
Název třídy.
ukazatel
Ukazatel, který se má přetypovat na ukazatel na objekt třídy typu.
Poznámky
Makro přetypuje parametr ukazatele na ukazatel na objekt typu parametru třídy .
Pokud je objekt odkazovaný ukazatelem "druhem" identifikované třídy, vrátí makro odpovídající ukazatel. Pokud se nejedná o právní přetypování, vrátí makro hodnotu NULL.
STATIC_DOWNCAST
Přetypuje objekt pobject na ukazatel na objekt class_name .
STATIC_DOWNCAST(class_name, pobject)
Parametry
class_name
Název třídy, na kterou se přetypuje.
objekt pobject
Ukazatel, který se má přetypovat na ukazatel na objekt class_name .
Poznámky
Objekt pobject musí být null nebo odkazovat na objekt třídy, který je odvozen přímo nebo nepřímo z class_name. V sestaveních aplikace s definovaným symbolem preprocesoru _DEBUG, makro ASSERT, pokud objekt pobject není NULL nebo odkazuje na objekt, který není "druhem" třídy zadané v parametru class_name (viz CObject::IsKindOf). V sestaveních, které nejsou _DEBUG , makro provede přetypování bez kontroly typu.
Třída zadaná v parametru class_name musí být odvozena a CObject
musí používat DECLARE_DYNAMIC a IMPLEMENT_DYNAMIC, DECLARE_DYNCREATE a IMPLEMENT_DYNCREATE nebo DECLARE_SERIAL a IMPLEMENT_SERIAL makra, jak je vysvětleno v článku CObject Třída: Odvození třídy z objektu CObject.
Můžete například přetypovat ukazatel na CMyDoc
, volaný pMyDoc
, na ukazatel pomocí CDocument
tohoto výrazu:
CDocument* pDoc = STATIC_DOWNCAST(CDocument, pMyDoc);
Pokud pMyDoc
neodkazuje na objekt odvozený přímo nebo nepřímo z CDocument
, makro bude ASSERT.