For a line by line tour through this example see Tutorial exa_signal.cxx.
// // Example code for CTBsignal // #include "CTB.hxx" #include "CTBprintf.hxx" #include "CTBsignal.hxx" //------------------------------------------+----------------------------------- class sub { public: sub(); void Set_i(int i); int Get_i() const; CTBsignalEmitter SEnew; private: int m_i; }; class obs { public: obs(); CTBsignalReceiver<obs,sub> SRnew; void New(sub* p_sub, CTBuint32 i_mask); }; //------------------------------------------+----------------------------------- sub::sub() : m_i(0) {} void sub::Set_i(int i) { m_i = i; SEnew(0x0001); } int sub::Get_i() const { return m_i; } //------------------------------------------+----------------------------------- obs::obs() : SRnew(this, &obs::New) {} void obs::New(sub* p_sub, CTBuint32 i_mask) { cout << "New called: p = " << p_sub << " mask = " << i_mask; if (i_mask) cout << " i = " << p_sub->Get_i(); cout << endl; } //------------------------------------------+----------------------------------- int main(int, char*) { sub* p_s = new sub; obs* p_o1 = new obs; obs* p_o2 = new obs; p_s->Set_i(17); p_o1->SRnew.Connect(p_s->SEnew, p_s); p_s->Set_i(18); p_o2->SRnew.Connect(p_s->SEnew, p_s); p_s->Set_i(19); delete p_o1; p_s->Set_i(20); delete p_s; delete p_o2; return 0; }