Demo.cpp 2.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. // Events.cpp : Diese Datei enthält die Funktion "main". Hier beginnt und endet die Ausführung des Programms.
  2. // https://github.com/Pseudomanifold/Events/tree/master
  3. // https://bastian.rieck.me/blog/2015/event_system_cxx11/
  4. #include <iostream>
  5. #include "Demo.h"
  6. #include "Dispatcher.h"
  7. #include <functional>
  8. #include <iostream>
  9. void onEvent1(const Event<EventType1>& event) {
  10. if (event.type() == EventType1::TEST_EVENT) {
  11. std::cout << "Function Event TYPE: EventType1::TEST_EVENT " << event.getName() << std::endl;
  12. }
  13. }
  14. void onEvent2(const Event<EventType2>& event) {
  15. if (event.type() == EventType2::TEST_EVENT) {
  16. std::cout << "Function Event TYPE: EventType2::TEST_EVENT " << event.getName() << std::endl;
  17. }
  18. }
  19. class ClassObserver1; // Forward declaration
  20. extern void ClearEvent(ClassObserver1& _p, const Event<EventType1>& event); // Forward declaration
  21. class ClassObserver1
  22. {
  23. public:
  24. void handle(const Event<EventType1>& e)
  25. {
  26. if (e.type() == EventType1::TEST_EVENT)
  27. {
  28. // This demonstrates how to obtain the underlying event type in case a
  29. // slot is set up to handle multiple events of different types.
  30. // const DemoEvent& demoEvent = static_cast<const DemoEvent&>( e );
  31. // std::cout << __PRETTY_FUNCTION__ << ": " << demoEvent.type() << std::endl;
  32. std::cout << "Class Event EventType1::TEST_EVENT " << e.getName() << std::endl;
  33. }
  34. if (e.type() == EventType1::TEST_EVENT_CLEAR)
  35. {
  36. std::cout << "Class Event EventType1::TEST_EVENT2 " << e.getName() << std::endl;
  37. ClearEvent(*this, e);
  38. }
  39. }
  40. };
  41. void ClearEvent(ClassObserver1 & _p, const Event<EventType1>& event) {
  42. if (event.type() == EventType1::TEST_EVENT_CLEAR) {
  43. std::cout << "Function Event TYPE: EventType2::TEST_EVENT " << event.getName() << std::endl;
  44. }
  45. }
  46. int main(int, char**)
  47. {
  48. ClassObserver1 classObserver1;
  49. Dispatcher<EventType1> dispatcher1;
  50. Dispatcher<EventType2> dispatcher2;
  51. Dispatcher<EventType1> dispatcher3;
  52. dispatcher1.subscribe(EventType1::TEST_EVENT, onEvent1);
  53. dispatcher1.subscribe(EventType1::TEST_EVENT, std::bind(&ClassObserver1::handle, classObserver1, std::placeholders::_1));
  54. dispatcher2.subscribe(EventType2::TEST_EVENT, onEvent2);
  55. dispatcher3.subscribe(EventType1::TEST_EVENT2, onEvent1);
  56. dispatcher3.subscribe(EventType1::TEST_EVENT_CLEAR, std::bind(&ClassObserver1::handle, classObserver1, std::placeholders::_1));
  57. std::cout << "#\n"
  58. << "# Posting a demo event. This should trigger two observers\n"
  59. << "#\n";
  60. DemoEvent e;
  61. dispatcher1.post(e);
  62. std::cout << "#\n"
  63. << "# Posting a demo event. This should trigger one observer\n"
  64. << "#\n";
  65. DemoEventAlt e2;
  66. dispatcher2.post(e2);
  67. std::cout << "#\n"
  68. << "# Posting a demo event. This should trigger no observers\n"
  69. << "#\n";
  70. dispatcher3.post(e);
  71. return 0;
  72. }