Conversión de tipos de objetos de clase de MFC

Las macros de conversión de tipos proporcionan una manera de convertir un puntero determinado a un puntero que apunta a un objeto de clase específica, con o sin comprobar que la conversión es legal.

En la tabla siguiente se enumeran las macros de conversión de tipos MFC.

Macros que convierten punteros a objetos de clase MFC

Nombre Descripción
DYNAMIC_DOWNCAST Convierte un puntero a un puntero a un objeto de clase mientras comprueba si la conversión es legal.
STATIC_DOWNCAST Convierte un puntero a un objeto de una clase a un puntero de un tipo relacionado. En una compilación de depuración, provoca un elemento ASSERT si el objeto no es una "especie" del tipo de destino.

DYNAMIC_DOWNCAST

Proporciona una forma práctica de convertir un puntero a un puntero a un objeto de clase mientras comprueba si la conversión es legal.

DYNAMIC_DOWNCAST(class, pointer)

Parámetros

clase
Nombre de una clase.

pointer
Puntero que se va a convertir a un puntero a un objeto de clase de tipo.

Comentarios

La macro convertirá el parámetro de puntero a un puntero a un objeto del tipo del parámetro de clase.

Si el objeto al que hace referencia el puntero es un "tipo" de la clase identificada, la macro devuelve el puntero adecuado. Si no es una conversión legal, la macro devuelve NULL.

STATIC_DOWNCAST

Convierte pobject en un puntero a un objeto class_name.

STATIC_DOWNCAST(class_name, pobject)

Parámetros

class_name
Nombre de la clase a la que se va a convertir.

pobject
Puntero que se va a convertir en un puntero a un objeto class_name.

Comentarios

pobject debe ser NULL o apuntar a un objeto de una clase que se deriva directa o indirectamente de class_name. En compilaciones de la aplicación con el símbolo de preprocesador _DEBUG definido, la macro declarará ASSERT si pobject no es NULL o si apunta a un objeto que no es un "tipo" de la clase especificada en el parámetro class_name (consulte CObject::IsKindOf). En compilaciones que no son de _DEBUG, la macro hace la conversión sin ninguna comprobación de tipos.

La clase especificada en el parámetro class_name debe derivarse de CObject y debe usar las macros DECLARE_DYNAMIC e IMPLEMENT_DYNAMIC, DECLARE_DYNCREATE e IMPLEMENT_DYNCREATE, o DECLARE_SERIAL e IMPLEMENT_SERIAL, como se explica en el artículo Clase CObject: Derivación de una clase de CObject.

Por ejemplo, podría convertir un puntero en CMyDoc, denominado pMyDoc, a un puntero a CDocument mediante esta expresión:

CDocument* pDoc = STATIC_DOWNCAST(CDocument, pMyDoc);

Si pMyDoc no apunta a un objeto derivado directa o indirectamente de CDocument, la macro será ASSERT.

Consulte también

Macros y globales