Приведение типов объектов классов MFC
Макросы приведения типов предоставляют способ приведения заданного указателя к указателю, который указывает на объект определенного класса или без проверки того, что приведение является законным.
В следующей таблице перечислены макросы приведения типов MFC.
Макросы, которые указывают указатели на объекты класса MFC
Имя | Описание |
---|---|
DYNAMIC_DOWNCAST | Возвращает указатель на указатель на объект класса, проверяя, является ли приведение законным. |
STATIC_DOWNCAST | Приведение указателя к объекту из одного класса в указатель связанного типа. В отладочной сборке вызывает утверждение, если объект не является типом целевого типа. |
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 макрос будет ASSERT, если pobject не имеет значения NULL, или если он указывает на объект, который не является "типом" класса, указанного в параметре class_name (см. раздел CObject::IsKindOf). В сборках, отличных от _DEBUG , макрос выполняет приведение без проверки типа.
Класс, указанный в параметре class_name , должен быть производным от CObject
и должен использоваться DECLARE_DYNAMIC и IMPLEMENT_DYNAMIC, DECLARE_DYNCREATE и IMPLEMENT_DYNCREATE, а также макросы DECLARE_SERIAL и IMPLEMENT_SERIAL, как описано в статье CObject Class: вывод класса из CObject.
Например, можно привести указатель на вызываемую pMyDoc
, к указателю CMyDoc
на CDocument
использование этого выражения:
CDocument* pDoc = STATIC_DOWNCAST(CDocument, pMyDoc);
Если pMyDoc
не указывает на объект, производный напрямую или косвенно, CDocument
макрос будет ASSERT.