fork(1) download
  1. #include <iostream>
  2. #include <vector>
  3. #include <functional>
  4.  
  5. namespace TGE
  6. {
  7. class EventListener
  8. {
  9. public:
  10. typedef struct
  11. {
  12. std::function<void()> run;
  13. bool triggered;
  14. std::string name;
  15. } Event;
  16.  
  17. template <typename F>
  18. void newEvent(F onRun, std::string eventName)
  19. {
  20. Event newEvent;
  21. newEvent.name = eventName;
  22. newEvent.triggered = false;
  23. newEvent.run = onRun;
  24. eventStack.push_back(newEvent);
  25. }
  26.  
  27. void trigger(std::string eventName)
  28. {
  29. std::vector<Event>::iterator itr;
  30.  
  31. for(itr = eventStack.begin(); itr != eventStack.end(); itr++)
  32. {
  33. if(itr->name == eventName) itr->triggered = true;
  34. }
  35. }
  36.  
  37. protected:
  38. std::vector<Event> eventStack;
  39. };
  40. }
  41.  
  42. class MenuState : protected TGE::EventListener
  43. {
  44. public:
  45. void enter()
  46. {
  47. newEvent([=](){Event1();}, "Event1");
  48. trigger("Event1");
  49.  
  50. std::vector<Event>::iterator itr;
  51. for(itr = eventStack.begin(); itr != eventStack.end(); itr++)
  52. {
  53. if(itr->triggered)
  54. {
  55. itr->run();
  56. itr->triggered = false;
  57. }
  58. }
  59. }
  60.  
  61. void Event1()
  62. {
  63. std::cout << "Event1";
  64. }
  65. };
  66.  
  67. int main()
  68. {
  69. MenuState* menuState = 0;
  70. menuState = new MenuState();
  71. menuState->enter();
  72.  
  73. return 0;
  74. }
Success #stdin #stdout 0s 3432KB
stdin
Standard input is empty
stdout
Event1