次の方法で共有


MFC クラス オブジェクトの型キャスト

型キャスト マクロを使用すると、キャストが有効かどうかを確認しなくても、特定のクラスのオブジェクトを指すポインターに特定のポインターをキャストできます。

次の表に、MFC 型キャスト マクロの一覧を示します。

MFC クラス オブジェクトへのポインターをキャストするマクロ

名前 説明
DYNAMIC_DOWNCAST キャストが有効かどうかを確認しながら、クラス オブジェクトへのポインターへのポインターをキャストします。
STATIC_DOWNCAST オブジェクトへのポインターを 1 つのクラスから関連する型のポインターにキャストします。 デバッグ ビルドで、オブジェクトがターゲット型の "種類" でない場合は ASSERT が発生します。

DYNAMIC_DOWNCAST

キャストが有効かどうかを確認しながら、クラス オブジェクトへのポインターへのポインターをキャストする便利な方法を提供します。

DYNAMIC_DOWNCAST(class, pointer)

パラメーター

クラス
クラスの名前。

pointer
class 型のオブジェクトへのポインターにキャストされるポインター。

解説

このマクロは、 pointer パラメーターを、 class パラメーターの型のオブジェクトへのポインターにキャストします。

ポインターによって参照されるオブジェクトが、識別されたクラスの "種類" である場合、マクロは適切なポインターを返します。 有効キャストでない場合、マクロは NULL を返します。

STATIC_DOWNCAST

pobjectclass_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);

pMyDocCDocumentから直接または間接的に派生したオブジェクトを指していない場合、マクロは ASSERT を実行します。

関連項目

マクロとグローバル