Klassenmethode via Zeiger aufrufen
-
Muß der Player denn die GUI-Klasse kennen? Wenn nicht, reicht es aus, daß die GUI ein Player-Objekt hält und ihn über Methoden-Aufrufe steuert.
-
Du kannst die GUI-Klasse wegabstrahieren.
Die Java-Variante (abstraktes Interface):
class Observer { public: virtual ~Observer(); virtual void Notify(int i) = 0; }; class Gui : public Observer { public: virtual void Notify(int i); }; class Player { public: Player(Observer& obs) : obs(obs) {} void DoSomething() { obs.Notify(37); } private: Observer& obs; }; Gui g; Player p(g); p.DoSomething();Die C++-Variante (Funktionsobjekt):
class Gui { public: void Notify(int i); }; class Player { public: Player(std::function<void(int)> callback) : callback(callback) {} void DoSomething() { callback(37); } private: std::function<void(int)> callback; }; Gui g; Player p(std::bind(&Gui::Notify, &g, _1));
-
So etwas lässt sich mit boost bind und function lösen.
-
Der Player soll die GUI nicht kennen.
Die GUI hat aber ein Objekt der Playerklasse und kann diese steuern, eigtl. Logisch. Nur würde ich gerne dem Player eine Funktion der GUI übergeben die
aus dem Soundpuffer ein Wave zeichnet. Der Player dudelt ja so vor sich hin
und immer wenn der Soundpuffer "refresht" wird soll die "GUI Zeichen" Funktion
angesprungen werden. Ich hoffe ihr versteht was ich meine. Oder habt ihr andere Ideen wie man so was machen könnte.Mfg AndONe
-
@Nexus Das mit "wegabstrahieren" sieht nach dem aus was ich suche. ich werde es mal damit versuchen. Meld mich dann wieder.
Erstmal vielen Dank für den Tip.MfG Thorsten
-
Kann das sein das nicht jeder Compiler std::function kennt ?
#include <functional> #include <iostream> using namespace std; std::function<void(int)> callback;Fehlermeldung von MinGW 4.4:
playerclass.h:23: error: ISO C++ forbids declaration of 'function' with no type
playerclass.h:23: error: invalid use of '::'
playerclass.h:23: error: expected ';' before '<' tokenNaja, morgen gehts weiter ... Nachti
Bestimmt hat noch einer von den Nachschwärmern ne Iddee
MfG AndOne
-
Kann durchaus sein, std::function ist afaik neu in C++0x, das ist noch nicht einmal offiziell verabschiedet.
-
Mit
-std=c++0xversuchen, oderstd::tr1::functionoderboost::functionverwenden. Für die zweite Möglichkeit brauchst du den Header<tr1/functional>und für die dritte die Boost-Bibliothek.
-
Hab das mal kurz auf Arbeit mit "tr1" getestet. Nun Compiliert er es, alles andere
probiere ich heute Abend zu Hause aus. Ich dank euch erst mal.MfG Thorsten
-
Danke euch allen für die Hilfe, nun klappt das so wie ich mir das vorgestellt
habe. Hier ein Link zu einem Video wo man sieht um was es ging.MfG AndOne