通常的单态实现大都市如下的形式:
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 };
采用双模板参数的手法
这样做的一个好处就是可以通过特定的环境来使用合适的单态版本