Typumwandlung von MFC-Klassenobjekten

Typ-Umwandlungsmakros bieten eine Möglichkeit, einen bestimmten Zeiger auf einen Zeiger zu umwandeln, der auf ein Objekt einer bestimmten Klasse zeigt, mit oder ohne zu überprüfen, ob die Umwandlung zulässig ist.

In der folgenden Tabelle sind die MFC-Typ-Umwandlungsmakros aufgeführt.

Makros, die Zeiger in MFC-Klassenobjekte umwandeln

Name Beschreibung
DYNAMIC_DOWNCAST Wandelt einen Zeiger auf einen Zeiger auf ein Klassenobjekt um, während überprüft wird, ob die Umwandlung zulässig ist.
STATIC_DOWNCAST Wandelt einen Zeiger in ein Objekt von einer Klasse in einen Zeiger eines verwandten Typs um. Führt in einem Debugbuild zu einer ASSERTION, wenn das Objekt keine "Art von" des Zieltyps ist.

DYNAMIC_DOWNCAST

Bietet eine praktische Möglichkeit, einen Zeiger auf einen Zeiger auf ein Klassenobjekt zu umwandeln, während überprüft wird, ob die Umwandlung zulässig ist.

DYNAMIC_DOWNCAST(class, pointer)

Parameter

class
Der Name einer Klasse.

pointer
Ein Zeiger, der in einen Zeiger auf ein Objekt vom Typ "Class" umgegossen werden soll.

Hinweise

Das Makro wandelt den Zeigerparameter in einen Zeiger auf ein Objekt des Typs des Klassenparameters um.

Wenn das objekt, auf das vom Zeiger verwiesen wird, eine "Art von" der identifizierten Klasse ist, gibt das Makro den entsprechenden Zeiger zurück. Wenn es sich nicht um eine legale Umwandlung handelt, gibt das Makro NULL zurück.

STATIC_DOWNCAST

Wandelt ein Pobject in einen Zeiger auf ein class_name -Objekt um.

STATIC_DOWNCAST(class_name, pobject)

Parameter

class_name
Der Name der Klasse, in die casten wird.

pobject
Der Zeiger, der in einen Zeiger in ein class_name-Objekt umgegossen werden soll.

Hinweise

"pobject " muss entweder NULL sein oder auf ein Objekt einer Klasse zeigen, die direkt oder indirekt von class_name abgeleitet wird. In Builds Ihrer Anwendung mit dem definierten _DEBUG Präprozessorsymbol wird das Makro BESTÄTIGEN, wenn pobject nicht NULL ist, oder wenn es auf ein Objekt verweist, das keine "Art von" der klasse ist, die im class_name-Parameter angegeben ist (siehe CObject::IsKindOf). In Nicht- _DEBUG-Builds führt das Makro die Umwandlung ohne Typüberprüfung aus.

Die im class_name-Parameter angegebene Klasse muss abgeleitet CObject werden und muss die DECLARE_DYNAMIC und IMPLEMENT_DYNAMIC, die DECLARE_DYNCREATE und IMPLEMENT_DYNCREATE oder die DECLARE_SERIAL und IMPLEMENT_SERIAL Makros verwenden, wie im Artikel CObject-Klasse erläutert: Ableiten einer Klasse von CObject.

Sie können z. B. einen Zeiger in einen Zeiger umwandeln, der CMyDocaufgerufen wird pMyDoc, um diesen Ausdruck zu CDocument verwenden:

CDocument* pDoc = STATIC_DOWNCAST(CDocument, pMyDoc);

Wenn pMyDoc nicht direkt oder indirekt auf ein Objekt verweist, das direkt oder indirekt von CDocumenteinem Objekt abgeleitet wird, wird das Makro ASSERT.

Siehe auch

Makros und Globalen