12/16/2005 8:15 PM johno: no teba potrebujem 12/16/2005 8:15 PM johno: mas chvilu 12/16/2005 8:15 PM johno: ? 12/16/2005 8:16 PM huGee: jo kludne 12/16/2005 8:17 PM johno: no takze problem je takyto 12/16/2005 8:17 PM johno: mame triedu CBaseModule 12/16/2005 8:17 PM huGee: c++ predpokladam 12/16/2005 8:17 PM johno: jj 12/16/2005 8:17 PM johno: ta ma metody register(callback) a notify() 12/16/2005 8:17 PM johno: a teraz to pride 12/16/2005 8:17 PM johno: uz som ti to pisal ale sa to zjednodusilo 12/16/2005 8:18 PM huGee: jo pamatam si 12/16/2005 8:18 PM johno: potrebujeme spravit aby si do register nejako poslal METODU nejakej instancie ktora sa ma zavolat pri notify 12/16/2005 8:18 PM johno: klasicky callback len cez metodu 12/16/2005 8:18 PM huGee: jo jasne 12/16/2005 8:18 PM johno: ako na to? 12/16/2005 8:19 PM huGee: ta callback metoda musi byt najskor virtual 12/16/2005 8:20 PM huGee: takto.. ak sa jedna len o volanie vzdy jednej a tej istej metody, napr. Callback() (co asi nie je tvoj pripad), tak staci si pamatat instanciu objektu.. co je jasne.. lenze ak nie, tak si musis pamatat aj 'metodu'.. mmnt (pozriem sources) 12/16/2005 8:20 PM johno: metoda je to vzdy ina ale nema ziadne parametre je to void nieco() 12/16/2005 8:21 PM huGee: ok vyborne.. vlastne zapamatanim metody si si akoby zapamatal jej parametre:) 12/16/2005 8:22 PM huGee: zadefinuj si typ callbacku ako nasledovy typ (odporucam cez typedef) : typedef void (CBaseModule::*CBaseModuleCallback)(); 12/16/2005 8:23 PM huGee: naslede teda metoda register bude void register(CBaseModuleCallback callback) 12/16/2005 8:23 PM huGee: este takto.. potrebujes zaregistrovat instanciu ineho objektu? 12/16/2005 8:23 PM johno: ano to su instancie 12/16/2005 8:24 PM huGee: tym padom bude metoda register vyzerat ako void register(CBaseModuleCallback callback, CBaseModule* object); alebo nejak podobne 12/16/2005 8:25 PM huGee: a registracia bude spocivat v zavolani register(MyClass::MyMethod, this); napr... 12/16/2005 8:25 PM johno: a notify? 12/16/2005 8:26 PM huGee: jo je tam este problem, ze ked zdedis nejaky objekt, tak sa ti nepodari bez pindania predat tu metodu ako parameter.. musis to natvrdo pretypovat na CBaseModuleCallback, odporucam pouzit reinterpret_cast, to fachci v kazdom kompileri:) 12/16/2005 8:27 PM huGee: jo a pri notify to zavolas nasledovne... napr. ((m_callback_object)->*(m_callback_method))(); 12/16/2005 8:28 PM huGee: tie 2 premenne si zapamatas v register.. 12/16/2005 8:28 PM johno: jj 12/16/2005 8:28 PM johno: to bude sice pole ale to je jedno 12/16/2005 8:29 PM huGee: dolezite je to presne tak ako som napisal uzatvorkovat:) kompiler az vyraz (...)() vyhodnoti spravne.. 12/16/2005 8:29 PM johno: jasne 12/16/2005 8:29 PM huGee: napr. ((m_callback_object)->*m_callback_method) by uz pindal.. ok 12/16/2005 8:30 PM johno: skusime. povieme vysledok 12/16/2005 8:30 PM huGee: ok 12/16/2005 8:32 PM huGee: my mame v kode asi nasledovne makro.. #define CLASS_CB(x) reinterpret_cast(&x) 12/16/2005 8:32 PM johno: super 12/16/2005 8:32 PM huGee: to sa da pouzit ako na this / ptr tak priamo na objekt, lebo ti vyrobi referenciu 12/16/2005 8:32 PM huGee: ee.ptr.. 12/16/2005 8:33 PM huGee: pouzitie teda register(CLASS_CB(myClass:myCallback), instance)