nntp2http.com
Posting
Suche
Optionen
Hilfe & Kontakt

"externe" event-methoden

Von: Frank (frank.wunderlich@gmail.com) [Profil]
Datum: 12.06.2009 00:43
Message-ID: <ac8e52da-6704-425a-9736-0b12e06380be@a36g2000yqc.googlegroups.com>
Newsgroup: de.comp.lang.iso-c++
Hallo,
ich habe schon einigeErafhrung mit delphi, und versuche mich jetzt
bisschen in C++.

in delphi kann man bei Klassen (bzw. deren Objekten) vom Hauptprogramm
funktionszeiger hinterlegen. diese werden klassenintern aufgerufen,
befinden sich aber nicht in der gleichen datei wie die
klassendefinition. weiterhin wird bei diesen Methoden ein
Instanzzeiger mitgeliefert.

gibt es sowas auch in C++? wenn ja, wie nennt sich das genau und wo
finde ich sowas?

in delphi sieht das z.b. so aus:

Definition der klasse:
[code]
TNotify=procedure() of object; //typ des Funktionszeigers; of object
besagt, dass bei der methode auch ein Pointer auf die Instanz
übergeben wird

class TBlah(TBlubb)
private
FNotify:TNotify; //variable für funktionszeiger
procedure DoNotify; //klasseninterne Methode zum aufrufen der
referenzierten funktion
public
property Notify:TNotify read FNotify write FNotify; //das property
zum setzen des funktionszeigers
end;

procedure TBlah.DoNotify;
begin
if assigned(FNotify) then FNotify; //wenn funktionszeiger gesetzt
ist, die Funktion aufrufen
end;
[/code]

im Hauptprogramm erstellt man eine entsprechende methode und weist
diese dem Objekt zu:
[code]
procedure BlahEvent(Sender:TObject);//hier plötzlich ein Parameter =>
Objekt-Referenz
begin

end;

//zuweisung des events
myBlah.Notify=BlahEvent;
[/code]

jedesmal, wenn klassenintern DoNotify aufgerufen wird, wird die im
Hauptprogramm befindliche BlahEvent-Methode mit ausgeführt.somit kann
die Klassendefinition universeller verwendet werden.

wie würde das in C++ aussehen?

ich habe schon eine weile rumgesucht, auch funktionszeiger gefunden,
aber da fehlt mir der instanz-zeiger. gut, man könnte diesen explizit
mitgeben, aber evtl gibt es ja schon ein fertiges Konstrukt.
ich hoffe, ich habe das verständlich dargelegt.

Gruß Frank

[ Auf dieses Posting antworten ]

Antworten