fork download
  1. #include <stdlib.h>
  2. #include <stdio.h>
  3. #include <iostream>
  4. #include <map>
  5.  
  6. class Callback {
  7. public:
  8. Callback(const char *message) : message(message) {
  9. }
  10.  
  11. void callbackMethod() {
  12. std::cout << message << std::endl;
  13. }
  14.  
  15. private:
  16. const char *message;
  17. };
  18.  
  19. template<typename T>
  20. class Worker {
  21. public:
  22. typedef void (T::*CALLBACK_METHOD)();
  23.  
  24. void registerCallback(T *callbackObj, CALLBACK_METHOD callbackMethod) {
  25. callbacks.insert(callbacks.end(), std::pair<T *, CALLBACK_METHOD>(callbackObj, callbackMethod));
  26. }
  27.  
  28. void executeCallbacks() {
  29. for (typename std::map<T *, CALLBACK_METHOD>::const_iterator iter = callbacks.begin(); iter != callbacks.end(); ++iter) {
  30. ((*iter).first->*((*iter).second))();
  31. }
  32. }
  33.  
  34. private:
  35. std::map<T *, CALLBACK_METHOD> callbacks;
  36. };
  37.  
  38. int main(int argc, char **argv) {
  39. Callback firstCallback("first callback called");
  40. Callback secondCallback("second callback called");
  41.  
  42. Worker<Callback> worker;
  43. worker.registerCallback(&firstCallback, &Callback::callbackMethod);
  44. worker.registerCallback(&secondCallback, &Callback::callbackMethod);
  45. worker.executeCallbacks();
  46.  
  47. return EXIT_SUCCESS;
  48. }
Success #stdin #stdout 0s 3476KB
stdin
Standard input is empty
stdout
first callback called
second callback called