fork download
  1. #include <iostream>
  2. #include <string>
  3.  
  4. class Event
  5. {
  6. protected:
  7. Event(std::string const& name)
  8. : name(name)
  9. {}
  10. public:
  11. virtual
  12. ~Event() = default;
  13.  
  14. public:
  15. std::string name;
  16. };
  17.  
  18. class Actor;
  19.  
  20. class ActorEvent
  21. : public Event
  22. {
  23. protected:
  24. ActorEvent(std::string const& name,
  25. Actor* actor)
  26. : Event(name)
  27. , actor(actor)
  28. {}
  29.  
  30. public:
  31. virtual
  32. ~ActorEvent() = default;
  33.  
  34. public:
  35. Actor* actor;
  36. };
  37.  
  38. class ActorCreated
  39. : public ActorEvent
  40. {
  41. public:
  42. ActorCreated(Actor* actor)
  43. : ActorEvent("ActorCreated", actor)
  44. {}
  45. virtual
  46. ~ActorCreated() = default;
  47. };
  48.  
  49. class ActorDeleted
  50. : public ActorEvent
  51. {
  52. public:
  53. ActorDeleted(Actor* actor)
  54. : ActorEvent("ActorDeleted", actor)
  55. {}
  56. virtual
  57. ~ActorDeleted() = default;
  58. };
  59.  
  60. class EventManager
  61. {
  62. public:
  63. void
  64. process(ActorCreated const& event)
  65. {
  66. std::cerr << "actor created (" << std::hex << event.actor << ")" << std::endl;
  67. }
  68.  
  69. void
  70. process(ActorDeleted const& event)
  71. {
  72. std::cerr << "actor deleted (" << std::hex << event.actor << ")" << std::endl;
  73. }
  74. };
  75.  
  76. EventManager e;
  77.  
  78. class Actor
  79. {
  80. public:
  81. Actor()
  82. {
  83. e.process(ActorCreated(this));
  84. }
  85.  
  86. ~Actor()
  87. {
  88. e.process(ActorDeleted(this));
  89. }
  90. };
  91.  
  92. int main()
  93. {
  94. std::cerr << "hello" << std::endl;
  95. {
  96. Actor a;
  97. }
  98. std::cerr << "good bye" << std::endl;
  99. }
  100.  
Success #stdin #stdout #stderr 0.01s 3476KB
stdin
Standard input is empty
stdout
Standard output is empty
stderr
hello
actor created (0xbfb0d10f)
actor deleted (0xbfb0d10f)
good bye