Advertisement
Guest User

Untitled

a guest
Sep 19th, 2017
52
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.74 KB | None | 0 0
  1. #ifndef PROPERTY_HPP
  2. #define PROPERTY_HPP
  3.  
  4. template <class PARAM>
  5. class UndefinedCallback
  6. {
  7.     public:
  8.         virtual void operator () (PARAM) = 0;
  9. };
  10.  
  11. template <class PARAM>
  12. class FunctionCallback
  13.     : public UndefinedCallback<PARAM>
  14. {
  15. private:
  16.     typedef void (*FUNCTION) (PARAM);
  17.     FUNCTION m_pFunction;
  18.  
  19. public:
  20.     FunctionCallback(FUNCTION pFunction)
  21.     {
  22.         m_pFunction = pFunction;
  23.     }
  24.  
  25.     inline void operator () (PARAM arg)
  26.     {
  27.         return (*m_pFunction) (arg);
  28.     }
  29. };
  30.  
  31. template <class CLASS, class PARAM>
  32. class MemberCallback
  33.     : public UndefinedCallback<PARAM>
  34. {
  35. private:
  36.     typedef void (CLASS::*FUNCTION) (PARAM);
  37.  
  38.     FUNCTION m_pFunction;
  39.     CLASS* m_pObj;
  40. public:
  41.     MemberCallback(CLASS* pObj, FUNCTION pFunction)
  42.     {
  43.         m_pObj = pObj;
  44.         m_pFunction = pFunction;
  45.     }
  46.  
  47.     inline void operator () (PARAM arg)
  48.     {
  49.         return (m_pObj->*m_pFunction) (arg);
  50.     }
  51. };
  52.  
  53. template <class PARAM>
  54. class Property
  55. {
  56. private:
  57.     UndefinedCallback<PARAM>* m_pCallback;
  58.  
  59. public:
  60.     Property()
  61.     {
  62.         m_pCallback = NULL;
  63.     }
  64.  
  65.     virtual ~Property()
  66.     {
  67.         if (m_pCallback)
  68.             delete m_pCallback;
  69.     }
  70.  
  71.     template <class CLASS> void Connect(CLASS* pObj, void (CLASS::*pFunction) (PARAM))
  72.     {
  73.         if (m_pCallback)
  74.             delete m_pCallback;
  75.  
  76.         m_pCallback = new MemberCallback<CLASS, PARAM>(pObj, pFunction);
  77.     }
  78.  
  79.     void Connect(void (*pFunction) (PARAM))
  80.     {
  81.         if (m_pCallback)
  82.             delete m_pCallback;
  83.  
  84.         m_pCallback = new FunctionCallback<PARAM>(pFunction);
  85.     }
  86.  
  87.     void Disconnect()
  88.     {
  89.         if (m_pCallback)
  90.             delete m_pCallback;
  91.  
  92.         m_pCallback = NULL;
  93.     }
  94.  
  95.     inline void operator () (PARAM arg)
  96.     {
  97.         if (m_pCallback)
  98.             (*m_pCallback) (arg);
  99.     }
  100. };
  101.  
  102. class NilType
  103. {
  104. };
  105.  
  106. #endif
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement