00001
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030 #ifndef _CALLBACK_H_
00031 #define _CALLBACK_H_
00032
00033
00034
00035
00036 #include <memory>
00037
00038
00039
00040
00041
00042
00043
00044
00045
00046 namespace OSB_LIB {
00047
00048
00049
00050
00051
00052
00053
00054
00055
00059 class CallBack {
00060 public:
00067 typedef std::auto_ptr<CallBack> AutoPtr;
00068 public:
00070 inline CallBack();
00072 inline virtual ~CallBack();
00078 inline AutoPtr clone() const;
00079 public:
00086 virtual void operator()() const = 0;
00113 template<typename T> T* isa(T*& ptr);
00115 template<typename T> const T* isa(const T*& ptr) const;
00116 protected:
00118 inline CallBack(const CallBack& rhs);
00120 inline CallBack& operator=(const CallBack& rhs);
00121 private:
00127 virtual CallBack* cloneP() const = 0;
00128 };
00129 }
00130
00131
00132
00133 namespace OSB_LIB {
00134
00135
00136 CallBack::CallBack()
00137 {
00138 }
00139
00140 CallBack::~CallBack()
00141 {
00142 }
00143
00144 CallBack::AutoPtr CallBack::clone() const
00145 {
00146 return AutoPtr(cloneP());
00147 }
00148
00149 CallBack::CallBack(const CallBack&)
00150 {
00151 }
00152
00153 CallBack& CallBack::operator=(const CallBack&)
00154 {
00155 return *this;
00156 }
00157
00158 template<typename T>
00159 T* CallBack::isa(T*& ptr)
00160 {
00161 ptr = dynamic_cast<T*>(this);
00162 return ptr;
00163 }
00164
00165 template<typename T>
00166 const T* CallBack::isa(const T*& ptr) const
00167 {
00168 ptr = dynamic_cast<const T*>(this);
00169 return ptr;
00170 }
00171 }
00172 #endif // #ifndef _CALLBACK_H_