Rzutowanie typów obiektów klas MFC
Makra rzutowania typów umożliwiają rzutowanie danego wskaźnika do wskaźnika wskazującego na obiekt określonej klasy, z sprawdzeniem, czy rzutowanie jest legalne.
W poniższej tabeli wymieniono makra rzutowe typu MFC.
Makra rzutujące wskaźniki do obiektów klas MFC
Nazwa/nazwisko | opis |
---|---|
DYNAMIC_DOWNCAST | Rzutuje wskaźnik do wskaźnika do obiektu klasy podczas sprawdzania, czy rzutowanie jest legalne. |
STATIC_DOWNCAST | Rzutuje wskaźnik na obiekt z jednej klasy na wskaźnik powiązanego typu. W kompilacji debugowania funkcja ASSERT powoduje, że obiekt nie jest "rodzajem" typu docelowego. |
DYNAMIC_DOWNCAST
Zapewnia przydatny sposób rzutowania wskaźnika do wskaźnika do obiektu klasy podczas sprawdzania, czy rzutowanie jest legalne.
DYNAMIC_DOWNCAST(class, pointer)
Parametry
class
Nazwa klasy.
wskaźnik
Wskaźnik do rzutowania do wskaźnika do obiektu klasy typu.
Uwagi
Makro rzutuje parametr wskaźnika na wskaźnik do obiektu typu parametru klasy .
Jeśli obiekt, do których odwołuje się wskaźnik, jest "rodzajem" zidentyfikowanej klasy, makro zwraca odpowiedni wskaźnik. Jeśli nie jest to rzutowanie prawne, makro zwraca wartość NULL.
STATIC_DOWNCAST
Rzutuje obiekt pobject na wskaźnik do obiektu class_name .
STATIC_DOWNCAST(class_name, pobject)
Parametry
class_name
Nazwa klasy, do których jest rzutowana.
pobject
Wskaźnik do rzutowania do wskaźnika do obiektu class_name .
Uwagi
Obiekt pobject musi mieć wartość NULL lub wskazywać obiekt klasy, która pochodzi bezpośrednio lub pośrednio z class_name. W kompilacjach aplikacji z zdefiniowanym symbolem preprocesora _DEBUG makro będzie asercją, jeśli obiekt pobject nie ma wartości NULL lub wskazuje obiekt, który nie jest "rodzajem" klasy określonej w parametrze class_name (zobacz CObject::IsKindOf). W kompilacjach innych niż _DEBUG makro wykonuje rzutowanie bez sprawdzania typu.
Klasa określona w parametrze class_name musi pochodzić z CObject
klasy i musi używać DECLARE_DYNAMIC i IMPLEMENT_DYNAMIC, DECLARE_DYNCREATE i IMPLEMENT_DYNCREATE lub makr DECLARE_SERIAL i IMPLEMENT_SERIAL, jak wyjaśniono w artykule Klasa CObject: Wyprowadzanie klasy z obiektu CObject.
Można na przykład rzutować wskaźnik na CMyDoc
, o nazwie pMyDoc
, na wskaźnik, aby CDocument
użyć tego wyrażenia:
CDocument* pDoc = STATIC_DOWNCAST(CDocument, pMyDoc);
Jeśli pMyDoc
obiekt nie wskazuje bezpośrednio lub pośrednio z CDocument
obiektu , makro będzie asercją.