Mailinglist Archive: opensuse-programming-de (211 mails)

< Previous Next >
Re: Callback
Hallo,

danke. Der springende Punkt war die Deklaration des Funktionszeigers
als Membervariable
> void (*mFunc)(int);
und
> Funktionszeiger dereferenzieren: (*mFunc)( e );
Das hatte ich zwar schon mal probiert, aber hatte nicht geklappt,
weil die Deklaration nicht stimmte.

Grüße

Stefan

On 21 Mar 2003 at 13:38, Bodo Kaelberer wrote:

> Hi
>
>
> > ich würde gerne eine Callback-Funktion deklarieren. Sie soll im
> > Konstruktor übergeben werden und die Funktion aufrufen, wenn ein
> > Ereignis eintritt. Etwa so
>
> > class A
> > {
> > public:
> > A(void(*func)(int i)) {
> > mFunc = func;
> > }
>
> > event(int e) {
>
> Kein Rueckgabetyp. Ich nehme mal void.
>
>
> > mFunc(e); // so geht es nicht
>
> Funktionszeiger dereferenzieren: (*mFunc)( e );
>
> > }
>
> > private:
> > void* mFunc;
>
> Das ist ein Zeiger auf void. Du brauchst einen Zeiger auf eine
> Funktion, die ein int als Parameter nimmt:
>
> void (*mFunc)(int);
>
>
> > };
>
> > class B
> > {
> > B() {
> > A(callback);
>
> Das ist ein Aufruf eines Funktion namens A(int) und nicht das Erzeugen
> eines Objektes. Nimm:
>
> A a( callbnnack );
>
> In B braeuchtest Du wahrscheinlich auch noch eine Referenz auf das
> erzeugte A-Objekt. Sonst kannst Du ja mit A nichts machen und auch die
> Funktion event() nicht aufrufen.
>
>
> > }
>
> Achtung: Konstruktor ist privat!
>
> > static void callback(int e) {
> > cout << e << endl;
> > }
> > };
>
> > Ich konstruiere also ein Objekt der Klasse B. Wenn dann die Funktion
> > event abgearbeitet wird, soll sie die callback-Funktion aufrufen. So
> > wie ich es hier beschrieben habe, klappt es nicht (siehe Kommentar).
>
> Fraglich ist fuer mich noch, ob man ueberhaupt einen Zeiger auf
> callback korrekt erzeugen kann. Es ist zwar eine statische Funktion,
> aber dennoch eine Member-Funktion der Klasse B. Und irgendwie hab ich
> ihm Kopf, dass man Zeiger auf Member-Funktionen nicht so einfach
> verwenden kann.
> Kannst Du ja mal ausprobieren.
>
> --
> | Bodo Kaelberer
> | http://www.webkind.de/
> | http://www.mehr-demokratie-wagen.de/
> ----
> | Haben oder Nichts sein
>
>
> --
> Um die Liste abzubestellen, schicken Sie eine Mail an:
> suse-programming-unsubscribe@xxxxxxxx
> Um eine Liste aller verfügbaren Kommandos zu bekommen, schicken
> Sie eine Mail an: suse-programming-help@xxxxxxxx
>



< Previous Next >