gtkmm: Problem mit signalen in Bezug auf mem_fun()
-
hi all,
ich habe folgendes Problem:
Ich möchte gern in "Child2" als Übergabe Paremeter des "signal_released" signals
eine Methode der "Base" Klasse übergeben..Ich habe in dem Beispiel Kommentare stehn die mein Problem
hoffentlich verdeutlichen.//Child3.h class Child3 : public Gtk::Button { };
//Child2.h class Child2 { public: Child2(){// dies funktioniert Problemlos was ja auch nicht verwundert. Child3.signal_released().connect(sigc::mem_fun(*this,&Child2::test_child2)); }; set_func(/*PROBLEM:was müsste hier stehn ????*/){ Child3.signal_released().connect(/*PROBLEM: was müsste hier stehn*/ ); }; void test_child2( ){/*tue irgendwas*/}; private: Child3 child_3; };
//Child1.h class Child1 { public: set_func(/*PROBLEM: ebenso wie oben*/){ child_2.set_func(/*PROBLEM: ebenso wie oben*/); }; private: Child2 child_2; };
//Base.h class Base { public: Base(){//sollte ja nun in etwa so aussehen: child_1.set_func(sigc::mem_fun(*this,&Base::test_base)); }; test_base(){/*tue irgendwas*/}; private: Child1 child_1; }
Also eigendich hab ich nur kein Plan wie ich die Übergabeparameter gestallten soll.
Ich hab auch mal versucht mich in der sigc Doku schlauzumachen aber hab bei dem Template Dschungel net mehr durchgeblickt.Wenn mir da jemand helfen könnte wär ich sehr Dankbar.. sitz da nun schon ewig dran.
mfg
SuiTheDoc
-
Hallo,
kennst du das schon? Hier wird sehr schön erklärt, wie man einem Signal-Handler noch zusätzliche Parameter übergeben kann. In deinem Fall wäre das Objekt ein Methoden-Pointer. Siehe hier für eine Erklärung.
Irgendwie habe ich dein Anliegen noch nicht so richtig verstanden, aber evtl. reicht dir das ja schon.
Im Übrigen wäre es eleganter, anstatt einem Methoden-Pointer ein Command-Pattern zu verwenden und das zu übergeben. Falls dir der letzte Satz nichts sagt, vergiss es
MfG
GPC