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() ;
}