__closure

Aus RAD Studio (Deutsch)
Wechseln zu: Navigation, Suche

Nach oben zu Schlüsselwörter alphabetisch - Index


Kategorie

Schlüsselwort-Erweiterungen

Syntax

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

Beschreibung

In C++ können zwei Arten von Funktionszeigern verwendet werden. Die erste ist ein einfacher Zeiger auf eine globale Funktion (nicht auf einen Member einer Klasse). Bei Klassen-Member-Funktionen ist ein einfacher Zeiger auf eine Methode für einen Aufruf nicht ausreichend, sondern es sind zwei Zeiger erforderlich: einer für das Objekt und der zweite für die Methodenadresse.

Alle VCL-Komponentenereignisse sind als Closures deklariert, damit Methoden einer Klasse aufgerufen werden können, wenn das Ereignis ausgelöst wird. Der folgende Quelltext ist ein Auszug aus dem Header Classes.hpp, der die Deklaration von TNotifyEvent zeigt, das in vielen Ereignissen in der VCL (z.B. in OnClick) verwendet wird.

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

Das folgende Beispiel zeigt, wie ein normaler, globaler Funktionszeigertyp deklariert wird:

typedef void (*PointerToAFunction)();

Er wird folgendermaßen verwendet:

/* Zuweisen einer Funktion an den Funktionszeiger */ PointerToAFunction a = SomeGlobalFunc;

Um den Funktionszeigertyp in einen Methodenzeiger umzuwandeln, müssen Sie nur __closure hinzufügen:

typedef void (__closure *PointerToAFunction)();

Methodenzeiger wird folgendermaßen verwendet:

/* Zuweisen einer Methode an den Methodenzeiger */ PointerToAFunction a = &(someObject.SomeMemberFunc);

Siehe auch

In anderen Sprachen