class StartEvent: public Event {} ; class StopEvent : public Event {} ; class CDPlayer: public Subscriber { public: void start(StartEvent*) {std::cerr << "Start the CD player\n" ;} void stop (StopEvent*) {std::cerr << "Stop the CD player\n" ;} } ; template <typename E> class Button: public Publisher { public: void click() {igs_emit(E) ;} } ; int main() { Button<StartEvent> start_button ; Button<StopEvent> stop_button ; CDPlayer cd ; igs_connect(&start_button, &cd, igs_functor(&cd, CDPlayer::start)) ; igs_connect(&stop_button , &cd, igs_functor(&cd, CDPlayer::stop)) ; start_button.click() ; stop_button. click() ; }