通常的單態(tài)實現(xiàn)大都市如下的形式:
1 class Object
2 {
3 public:
4 Object* Instance();
5 protected:
6 };
7
8
(應(yīng)該是Object* Instance())
獲取可以采用如下的模板寫法:
1 template<clas T>
2 class Singleton
3 {
4 public:
5 static T* Instance();
6 };
7
其實可以對其模板寫法做一下變形如下:
1 ////////////////////////////////////////////////////////////
2 /// 單態(tài)模板類(非線程安全的)
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 //! 對象指針的析構(gòu)
22 static void Deinit()
23 {
24 delete instance;
25 instance = NULL;
26 };
27
28 private:
29 static Base* instance;
30 };
采用雙模板參數(shù)的手法
這樣做的一個好處就是可以通過特定的環(huán)境來使用合適的單態(tài)版本