Поделиться через


Приведение типов объектов классов 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.

См. также

Макросы и глобальные