SingletonT.hh
00001 /*
00002  * Copyright 2011 Nate Koenig & Andrew Howard
00003  *
00004  * Licensed under the Apache License, Version 2.0 (the "License");
00005  * you may not use this file except in compliance with the License.
00006  * You may obtain a copy of the License at
00007  *
00008  *     http://www.apache.org/licenses/LICENSE-2.0
00009  *
00010  * Unless required by applicable law or agreed to in writing, software
00011  * distributed under the License is distributed on an "AS IS" BASIS,
00012  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
00013  * See the License for the specific language governing permissions and
00014  * limitations under the License.
00015  *
00016 */
00017 /* Desc: Singleton base class
00018  * Author: Nate Koenig
00019  * Date: 2 Sept 2007
00020  */
00021 
00022 #ifndef SINGLETONT_HH
00023 #define SINGLETONT_HH
00024 
00027 
00029 template <class T>
00030 class SingletonT
00031 {
00033   public: static T *Instance()
00034           {
00035             return &GetInstance();
00036           }
00037 
00039   protected: SingletonT() {}
00040 
00042   protected: virtual ~SingletonT() {}
00043 
00044   private: static T &GetInstance()
00045            {
00046              static T t;
00047              return static_cast<T &>(t);
00048            }
00049 
00050   private: static T &myself;
00051 };
00052 
00053 template <class T>
00054 T &SingletonT<T>::myself = SingletonT<T>::GetInstance();
00056 
00057 #endif