Udostępnij za pośrednictwem


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 CDocumentobiektu , makro będzie asercją.

Zobacz też

Makra i globalne