Sdílet prostřednictvím


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.

Viz také

Makra a globální objekty