00001 00013 /***************************************************************************** 00014 ** Ifdefs 00015 *****************************************************************************/ 00016 00017 #ifndef ECL_UTILITIES_SINGLETON_HPP_ 00018 #define ECL_UTILITIES_SINGLETON_HPP_ 00019 00020 /***************************************************************************** 00021 ** Namespaces 00022 *****************************************************************************/ 00023 00024 namespace ecl { 00025 00026 /***************************************************************************** 00027 ** Class [Singleton] 00028 *****************************************************************************/ 00051 template<typename T> class Singleton 00052 { 00053 public: 00059 static T& instance() 00060 { 00061 static T the_single_instance; // assumes T has a protected default constructor 00062 return the_single_instance; 00063 } 00064 00065 virtual ~Singleton () {} 00066 }; 00067 00068 }; // namespace ecl 00069 00070 #endif /*ECL_UTILITIES_SINGLETON_HPP_*/