Callbacks

Schnelle objektorientierte, kompilierende Programmiersprache.
Antworten
Benutzeravatar
hackmack
Beiträge: 85
Registriert: Do Mär 26, 2009 10:16 pm

Callbacks

Beitrag von hackmack » So Mär 28, 2010 9:53 pm

Hi,

wenn ich bspw. folgenden Aufbau habe:

Code: Alles auswählen

class k3;

class k2
{
	private:
		k3 k3_obj;
};

class k1
{
	private:
		k2 k2_obj;
	public:
		void callback()
};
Jetzt passiert in k3 irgendetwas wichtiges, worüber k1 gerne informiert sein würde, deswegen ruft es die Funktion callback() auf. Bloß wie mach ich das mit dem Callback am besten?

main.cpp

Code: Alles auswählen

#include <iostream>
#include "main.h"
using namespace std;

k3::k3(k1 *grand_parent)
{
    this->k1_ptr = grand_parent;
    this->irgendetwas_wichtiges();
}
void k3::irgendetwas_wichtiges()
{
    this->k1_ptr->callback();
}
k2::k2(k1 *parent) : k3_obj(parent)
{
}
void k1::callback()
{
    cout << "Callback wurde aufgerufen" << endl;
}
k1::k1() : k2_obj(this)
{
}

int main()
{
    k1 temp;
    return 0;
}
main.h

Code: Alles auswählen

class k1;

class k3
{
	private:
		k1 *k1_ptr;
	public:
		k3(k1 *grand_parent);
		void irgendetwas_wichtiges();
};

class k2
{
	private:
		k3 k3_obj;
	public:
		k2(k1 *parent);
};

class k1
{
	private:
		k2 k2_obj;
	public:
        k1();
		void callback();
};
So wie oben, dass ich einfach einen Pointer von k1 übergebe; oder gibt es da bessere Lösungen?

Mfg.
hackmack
They say, if you play a Microsoft CD backwards, you hear satanic messages. Thats nothing, cause if you play it forwards, it installs Windows.

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8862
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: Callbacks

Beitrag von Xin » So Mär 28, 2010 10:23 pm

Das ist im Prinzip genau das, was Du dann tun musst. ^^

Wenn Du aus dem K1 Zeiger noch eine Liste von K1-Zeigern machst, hast Du komplettes Eventing abgebildet. Zusätzlich kannst Du noch Methodenzeiger verwenden, dann kannst Du sogar zwischen den Methoden auswählen, die Du aufrufen willst, kannst also k1-Objekte unterschiedlich informieren.

Solange es nur ein K1-Objekt gibt, ist Dein Vorgehen aber optimal.
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

Benutzeravatar
hackmack
Beiträge: 85
Registriert: Do Mär 26, 2009 10:16 pm

Re: Callbacks

Beitrag von hackmack » Mo Mär 29, 2010 7:10 pm

Wie meinst du das mit dem komplettem Eventing? Was wäre bspw. an Anwendungsfall dafür?
They say, if you play a Microsoft CD backwards, you hear satanic messages. Thats nothing, cause if you play it forwards, it installs Windows.

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8862
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: Callbacks

Beitrag von Xin » Mo Mär 29, 2010 10:55 pm

hackmack hat geschrieben:Wie meinst du das mit dem komplettem Eventing? Was wäre bspw. an Anwendungsfall dafür?
Ziehst Du das voll durch, hast Du keinen Callback-Pointer, sondern eine Liste, die Callback-Objekte enthält.

Die Liste z.B. enthält alle Objekte, die beim Event 'MouseClick' informiert werden wollen. Jedes Objekt hat eine Funktion 'OnMouseClick( int x, int y, short buttons )'. Wer immer wissen will, wann eine Maustaste gedrückt wird, trägt sich in die Liste ein und wenn jemand die Maus klickt, wird ein Objekt nach dem anderen darüber informiert.
Das läuft im Prinzip genauso ab, wie Du es für ein einzelnes Callback-Objekt beschrieben hast.
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

Antworten