Runnable.h++
Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023 #ifndef __ccxx_Runnable_hxx
00024 #define __ccxx_Runnable_hxx
00025
00026 #include <commonc++/Common.h++>
00027
00028 namespace ccxx {
00029
00035 class COMMONCPP_API Runnable
00036 {
00037
00038 public:
00039
00041 virtual ~Runnable() { }
00042
00044 virtual void run() = 0;
00045
00046 };
00047
00080 template<class T> class RunnableDelegate : public Runnable
00081 {
00082 public:
00083
00091 RunnableDelegate(T *object, void (T::* func)())
00092 : _object(object),
00093 _func(func)
00094 {
00095 }
00096
00098 void run()
00099 {
00100 (_object->*_func)();
00101 }
00102
00103 private:
00104
00105 T* _object;
00106 void (T::*_func)();
00107 };
00108
00116 template<class T, typename A> class RunnableClosure : public Runnable
00117 {
00118 public:
00119
00128 RunnableClosure(T *object, void (T::* func)(A), A argument)
00129 : _object(object),
00130 _func(func),
00131 _argument(argument)
00132 {
00133 }
00134
00136 void run()
00137 {
00138 (_object->*_func)(_argument);
00139 }
00140
00141 private:
00142
00143 T* _object;
00144 void (T::*_func)(A);
00145 A _argument;
00146 };
00147
00148 };
00149
00150 #endif // __ccxx_Runnable_hxx
00151
00152