using namespace listener ; class Message: public Event { public: Message(const std::string& m): m_(m) {} const std::string& message() const {return m_ ;} private: std::string m_ ; } ; class RadioOff: public Event { } ; class RadioStation: public Publisher { public: RadioStation(const std::string& name): name_(name) {} ~RadioStation() {igs_emit(RadioOff) ;} void send(const std::string& m) {igs_emit(Message(name_+": "+m)) ;} const std::string& name() {return name_ ;} private: std::string name_ ; } ; class Receiver: public Subscriber { public: void message(Message* e) { std::cerr << e->message() << std::endl ; } void radio_off(RadioOff* e) { RadioStation* s = dynamic_cast<RadioStation*>(e->get_source()) ; std::cerr << "Radio " << s->name() << " is now off" << std::endl ; } } ; int main() { RadioStation* radio1 = new RadioStation("105.5") ; RadioStation* radio2 = new RadioStation("98.3 ") ; Receiver* r = new Receiver ; igs_connect(radio1, r, igs_functor(r, Receiver::message)) ; igs_connect(radio1, r, igs_functor(r, Receiver::radio_off)) ; igs_connect(radio2, r, igs_functor(r, Receiver::message)) ; igs_connect(radio2, r, igs_functor(r, Receiver::radio_off)) ; radio1->send("News") ; radio2->send("Music") ; delete radio1 ; radio2->send("Informations") ; igs_disconnect(radio2, r, igs_functor(r, Receiver::message)) ; radio2->send("Variety") ; delete radio2 ; }Will print:
105.5: News 98.3 : Music Radio 105.5 is now off 98.3 : Informations Radio 98.3 is now off