Echo89

Simple Callback System in C++

Jun 28th, 2013
61
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #include <iostream>
  2. #include <string>
  3.  
  4. class CallbackWrapper
  5. {
  6.     public:
  7.         virtual ~CallbackWrapper() { };
  8.         virtual void Call() = 0;
  9. };
  10.  
  11. template <typename MT> class CallbackFunction : public CallbackWrapper
  12. {
  13.     typedef void (*CALLBACK)(MT);
  14.     CALLBACK func;
  15.     MT data;
  16.     public:
  17.         CallbackFunction() { };
  18.         void SetData(void (*f)(MT), MT d)
  19.         {
  20.             func = f;
  21.             data = d;
  22.         }
  23.         void Call()
  24.         {
  25.             func(data);
  26.         }
  27. };
  28.  
  29. class Callback
  30. {
  31.     CallbackWrapper *CallbackClass;
  32.     public:
  33.         Callback() { };
  34.         ~Callback()
  35.         {
  36.             delete CallbackClass;
  37.         }
  38.         template <typename T> void SetCallback(CallbackFunction <T> *func)
  39.         {
  40.             CallbackClass = func;
  41.         }
  42.         void Call()
  43.         {
  44.             CallbackClass->Call();
  45.         }
  46. };
  47.  
  48. template <typename CT> Callback NewCallback(void (*func)(CT), CT data)
  49. {
  50.     CallbackFunction <CT> *cf = new CallbackFunction <CT>;
  51.     cf->SetData(func, data);
  52.     Callback cb;
  53.     cb.SetCallback(cf);
  54.     return cb;
  55. };
  56.  
  57. void Call(Callback CallbackFunc)
  58. {
  59.     CallbackFunc.Call();
  60. }
  61.  
  62. void foo(std::string str)
  63. {
  64.     std::cout << str << "\n";
  65. }
  66.  
  67. int main()
  68. {
  69.     std::string str;
  70.     str.append("Hello, World!");
  71.     Call( NewCallback(&foo, str) );
  72.     return 0;
  73. }
RAW Paste Data