通常的單態實現大都市如下的形式:
1 class Object
2 {
3 public:
4 Object* Instance();
5 protected:
6 };
7
8
(應該是Object* Instance())
獲取可以采用如下的模板寫法:
1 template<clas T>
2 class Singleton
3 {
4 public:
5 static T* Instance();
6 };
7
其實可以對其模板寫法做一下變形如下:
1 ////////////////////////////////////////////////////////////
2 /// 單態模板類(非線程安全的)
3 ////////////////////////////////////////////////////////////
4 template <typename Base, typename T>
5 class Singleton
6 {
7 public:
8
9 //! 獲取對象指針
10 /*!
11 這里暫時不需要線程安全的版本:)
12 */
13 static T* Instance()
14 {
15 if( NULL == instance )
16 instance = new T;
17 assert(instance = 0);
18 return instance;
19 };
20
21 //! 對象指針的析構
22 static void Deinit()
23 {
24 delete instance;
25 instance = NULL;
26 };
27
28 private:
29 static Base* instance;
30 };
采用雙模板參數的手法
這樣做的一個好處就是可以通過特定的環境來使用合適的單態版本