Cast di tipo degli oggetti classe MFC
Le macro di cast dei tipi consentono di eseguire il cast di un puntatore specifico a un puntatore che punta a un oggetto di una classe specifica, con o senza verificare che il cast sia valido.
Nella tabella seguente sono elencate le macro di cast dei tipi MFC.
Macro che esegue il cast dei puntatori a oggetti classe MFC
Nome | Descrizione |
---|---|
DYNAMIC_DOWNCAST | Esegue il cast di un puntatore a un puntatore a un oggetto classe durante il controllo per verificare se il cast è valido. |
STATIC_DOWNCAST | Esegue il cast di un puntatore a un oggetto da una classe a un puntatore di un tipo correlato. In una compilazione di debug, determina un'istruzione ASSERT se l'oggetto non è un tipo di destinazione. |
DYNAMIC_DOWNCAST
Fornisce un modo pratico per eseguire il cast di un puntatore a un puntatore a un oggetto classe durante il controllo per verificare se il cast è valido.
DYNAMIC_DOWNCAST(class, pointer)
Parametri
class
Nome di una classe.
pointer
Puntatore di cui eseguire il cast a un puntatore a un oggetto di classe di tipo.
Osservazioni:
La macro eseguirà il cast del parametro puntatore a un puntatore a un oggetto del tipo del parametro di classe.
Se l'oggetto a cui fa riferimento il puntatore è un "tipo" della classe identificata, la macro restituisce il puntatore appropriato. Se non è un cast legale, la macro restituisce NULL.
STATIC_DOWNCAST
Esegue il cast di pobject a un puntatore a un oggetto class_name .
STATIC_DOWNCAST(class_name, pobject)
Parametri
class_name
Nome della classe a cui viene eseguito il cast.
pobject
Puntatore di cui eseguire il cast a un puntatore a un oggetto class_name .
Osservazioni:
pobject deve essere NULL o puntare a un oggetto di una classe derivata direttamente, o indirettamente, da class_name. Nelle compilazioni dell'applicazione con il simbolo del preprocessore _DEBUG definito, la macro asserterà se pobject non è NULL o se punta a un oggetto che non è un "tipo" della classe specificata nel parametro class_name (vedere CObject::IsKindOf). Nelle compilazioni non _DEBUG la macro esegue il cast senza alcun controllo dei tipi.
La classe specificata nel parametro class_name deve essere derivata da CObject
e deve usare le DECLARE_DYNAMIC e le IMPLEMENT_DYNAMIC, il DECLARE_DYNCREATE e il IMPLEMENT_DYNCREATE oppure le macro DECLARE_SERIAL e IMPLEMENT_SERIAL come illustrato nell'articolo Classe CObject: Derivazione di una classe da CObject.
Ad esempio, è possibile eseguire il cast di un puntatore a CMyDoc
, denominato pMyDoc
, a un puntatore all'uso CDocument
di questa espressione:
CDocument* pDoc = STATIC_DOWNCAST(CDocument, pMyDoc);
Se pMyDoc
non punta a un oggetto derivato direttamente o indirettamente da CDocument
, la macro eseguirà ASSERT.