MFC 类对象的类型强制转换
无论是否检查强制转换是否合法,均可使用类型强制转换宏将给定指针强制转换为指向特定类的对象的指针。
下表列出了 MFC 类型强制转换宏。
将指针强制转换为 MFC 类对象的宏
名称 | 描述 |
---|---|
DYNAMIC_DOWNCAST | 在检查强制转换是否合法时,将指针强制转换为指向类对象的指针。 |
STATIC_DOWNCAST | 将指向对象的指针从一个类强制转换为相关类型的指针。 在调试版本中,如果对象不是一种目标类型,则会导致 ASSERT。 |
DYNAMIC_DOWNCAST
提供一种方便的方法,用于在检查强制转换是否合法时将指针强制转换为指向类对象的指针。
DYNAMIC_DOWNCAST(class, pointer)
参数
class
类的名称。
pointer
一个指针,它要强制转换为指向 class 类型对象的指针。
备注
该宏会将 pointer 参数强制转换为指向 class 参数类型的对象的指针。
如果指针引用的对象是某种已标识的类,则宏将返回相应的指针。 如果强制转换不合法,则宏返回 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 参数中指定的某种类(参见 CObject::IsKindOf),则宏将执行 ASSERT。 在非 _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。