__closure

提供: Appmethod Topics
移動先: 案内検索

キーワード(アルファベット順):インデックス への移動


カテゴリ

拡張キーワード

構文

<type> ( __closure * <id> ) (<param list>);

説明

C++ で利用できる関数ポインタには 2 種類のものがあります。1 つ目は、グローバル関数(クラスのメンバではない)を指す単純なポインタです。クラスのメンバ関数の場合には、メソッドの単純なポインタを使ってただ呼び出すことはできません。実際には 2 つのポインタが必要になります。元のオブジェクトを指すポインタと、メソッドのアドレスを指すポインタです。

VCL コンポーネント イベントはすべて、イベントが発生したときにクラスのメソッドを呼び出せるよう、クロージャとして宣言されます。次のコードは Classes.hpp ヘッダーの一部で、VCL の多くのイベント(OnClick など)で使われている TNotifyEvent の宣言を示しています。

typedef void __fastcall (__closure *TNotifyEvent)(System::TObject* Sender);

次の例は、通常のグローバル関数のポインタ型の宣言方法を示しています。

typedef void (*PointerToAFunction)();

これは次のように使用します。

/* Assigning a function to the function pointer */
PointerToAFunction a = SomeGlobalFunc;

この関数ポインタ型をメソッド ポインタにするには、次のように __closure を付け加えます。

typedef void (__closure *PointerToAFunction)();

このメソッド ポインタは次のように使用します。

/* Assigning a method to the method pointer */
PointerToAFunction a = &(someObject.SomeMemberFunc);

関連項目

コード例