00001 #ifndef _unique_h
00002 #define _unique_h
00003 
00006 
00058 template <class T> class CUnique
00059 {
00060 public:
00061         CUnique (){}
00062         virtual ~CUnique(){}
00063 
00064         
00065         
00067         static T * GetMe() {return Me;}
00068 
00069         
00070         
00072         static void MakeMe()
00073         {
00074                 assert (Me == NULL);
00075                 Me = new T;
00076         }
00077 
00079         static void DestroyMe()
00080         {
00081                 delete Me;
00082                 Me = NULL;
00083         }
00084 protected:
00085         static T * Me;
00086 };
00087 
00088 template <class T> T* CUnique <T>::Me = NULL;
00089 
00090 #endif
00091