MFC クラス オブジェクトの型キャスト
型キャスト マクロを使用すると、キャストが有効かどうかを確認しなくても、特定のクラスのオブジェクトを指すポインターに特定のポインターをキャストできます。
次の表に、MFC 型キャスト マクロの一覧を示します。
MFC クラス オブジェクトへのポインターをキャストするマクロ
名前 | 説明 |
---|---|
DYNAMIC_DOWNCAST | キャストが有効かどうかを確認しながら、クラス オブジェクトへのポインターへのポインターをキャストします。 |
STATIC_DOWNCAST | オブジェクトへのポインターを 1 つのクラスから関連する型のポインターにキャストします。 デバッグ ビルドで、オブジェクトがターゲット型の "種類" でない場合は ASSERT が発生します。 |
DYNAMIC_DOWNCAST
キャストが有効かどうかを確認しながら、クラス オブジェクトへのポインターへのポインターをキャストする便利な方法を提供します。
DYNAMIC_DOWNCAST(class, pointer)
パラメーター
クラス
クラスの名前。
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 パラメーターで指定されたクラスの "種類" ではないオブジェクトを指している場合に ASSERT を実行します ( CObject::IsKindOf を参照)。 _DEBUG以外のビルドでは、マクロは型チェックなしでキャストを実行します。
class_name パラメーターで指定するクラスは、CObject
から派生する必要があり、「CObject クラス: CObject からのクラスの派生」で説明されているように、DECLARE_DYNAMICとIMPLEMENT_DYNAMIC、DECLARE_DYNCREATEとIMPLEMENT_DYNCREATE、またはDECLARE_SERIALマクロとIMPLEMENT_SERIALマクロを使用する必要があります。
たとえば、次の式を使用して、pMyDoc
と呼ばれるCMyDoc
へのポインターをCDocument
へのポインターにキャストできます。
CDocument* pDoc = STATIC_DOWNCAST(CDocument, pMyDoc);
pMyDoc
がCDocument
から直接または間接的に派生したオブジェクトを指していない場合、マクロは ASSERT を実行します。