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 CMyDoc
aufgerufen 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 CDocument
einem Objekt abgeleitet wird, wird das Makro ASSERT.