MFC 類別物件的類型轉換
型別轉換巨集提供將指定指標轉換成指向特定類別物件的指標的方法,且不檢查轉換是否合法。
下表列出 MFC 類型轉換巨集。
將指標轉換成 MFC 類別物件的巨集
名稱 | 描述 |
---|---|
DYNAMIC_DOWNCAST | 在檢查轉換是否合法時,將指標轉換成類別物件的指標。 |
STATIC_DOWNCAST | 將物件指標從一個類別轉換成相關類型的指標。 在偵錯組建中,如果物件不是目標類型的「種類」,則會導致ASSERT。 |
DYNAMIC_DOWNCAST
提供一個方便的方式,在檢查轉換是否合法時,將指標轉換成類別物件的指標。
DYNAMIC_DOWNCAST(class, pointer)
參數
class
類別的名稱。
pointer
要轉換成類別物件之指標的指標。
備註
巨集會將指標參數轉換成類別參數型別物件的指標。
如果指標所參考的物件是已識別類別的「種類」,巨集會傳回適當的指標。 如果不是合法的轉換,巨集會傳回 NULL。
STATIC_DOWNCAST
將pobject轉換成class_name物件的指標。
STATIC_DOWNCAST(class_name, pobject)
參數
class_name
要轉換成的類別名稱。
pobject
要轉換成class_name物件的指標。
備註
pobject 必須是 NULL,或指向直接或間接衍生自 class_name 之類別的物件。 在已定義_DEBUG預處理器符號的應用程式組建中,如果 pobject 不是 NULL,則巨集會判斷提示,或指向class_name參數中指定的類別不是 “kind” 的物件(請參閱 CObject::IsKindOf)。 在非 _DEBUG 組建中,巨集會執行轉換而不檢查任何類型。
class_name 參數中指定的類別必須衍生自 CObject
,而且必須使用DECLARE_DYNAMIC和IMPLEMENT_DYNAMIC、DECLARE_DYNCREATE和IMPLEMENT_DYNCREATE,或DECLARE_SERIAL和IMPLEMENT_SERIAL巨集,如 CObject 類別:衍生 CObject 類別一文中所述。
例如,您可以將指標 CMyDoc
轉換成 ,稱為 pMyDoc
的指標,轉換為使用這個表示式的 CDocument
指標:
CDocument* pDoc = STATIC_DOWNCAST(CDocument, pMyDoc);
如果 pMyDoc
不是指向直接或間接衍生自 CDocument
的物件,巨集將會是 ASSERT。