fork download
  1. #include <iostream>
  2. #include <functional>
  3. using namespace std;
  4.  
  5. class led {
  6. private:
  7. int id;
  8. static int nextid;
  9. public:
  10. led() { id=++nextid; }
  11. int get_id() { return id; }
  12. void turn_on() { cout<<"Turn on led "<<id<<endl; }
  13. void turn_off() { cout<<"Turn off led "<<id<<endl; }
  14. };
  15. class blinking_led : public led {
  16. public:
  17. void blink() { cout<<"Blink "<<get_id()<<endl; cout<<" ->"; turn_on();cout<<" ->"; turn_off();}
  18. };
  19. class auto_switch{
  20. std::function<void()> action;
  21. public:
  22. auto_switch(function<void()>a) : action(a) {}
  23. void go () { action(); }
  24. };
  25.  
  26. int led::nextid=0;
  27.  
  28. int main() {
  29. led l1;
  30. blinking_led l2;
  31. l1.turn_on(); l1.turn_off();
  32. l2.blink();
  33. auto_switch s(bind(&led::turn_off, l1));
  34. s.go();
  35. auto_switch s2(bind(&blinking_led::blink, l2));
  36. s2.go();
  37.  
  38. return 0;
  39. }
Success #stdin #stdout 0s 4524KB
stdin
Standard input is empty
stdout
Turn on led 1
Turn off led 1
Blink 2
  ->Turn on led 2
  ->Turn off led 2
Turn off led 1
Blink 2
  ->Turn on led 2
  ->Turn off led 2