00001 // -*- C++ -*- 00019 #ifndef Listener_h 00020 #define Listener_h 00021 00022 00043 class ListenerBase 00044 { 00045 public: 00059 virtual ~ListenerBase(){} 00060 00074 virtual void invoke() = 0; 00075 }; 00076 00096 template <class ListenerClass, 00097 class CallbackFunc = void (ListenerClass::*)()> 00098 class ListenerObject 00099 : public ListenerBase 00100 { 00101 public: 00121 ListenerObject(ListenerClass* obj, CallbackFunc cbf) 00122 : m_obj(obj), m_cbf(cbf) 00123 { 00124 } 00125 00139 virtual ~ListenerObject() 00140 { 00141 } 00142 00156 virtual void invoke() 00157 { 00158 (m_obj->*m_cbf)(); 00159 } 00160 00161 private: 00162 ListenerClass* m_obj; 00163 CallbackFunc m_cbf; 00164 }; 00165 00185 typedef void (*CallbackFunc)(); 00186 class ListenerFunc 00187 : public ListenerBase 00188 { 00189 public: 00207 ListenerFunc(CallbackFunc cbf) 00208 : m_cbf(cbf) 00209 { 00210 } 00211 00225 virtual ~ListenerFunc(){} 00226 00240 virtual void invoke() 00241 { 00242 (*m_cbf)(); 00243 } 00244 00245 private: 00246 CallbackFunc m_cbf; 00247 }; 00248 00249 #endif // Listener_h