本文演示了如何无需显式声明一个类,直接通过“类名::GetInstance()”方式获得单类实例的指针。
#include <iostream> using namespace std; // Singleton 基类,提供 GetInstance() 方法,获得T类的单实例指针 template <class T> class Singleton{ public: static T* GetInstance(){ static T instance; // 利用 static 从而获得单类型的实例 return &instance; } protected: Singleton(){} virtual ~Singleton(){} }; // 子类 MySingleton,只需继承自 Singleton<MySingleton>, // 即可通过 MySingleton::GetInstance() 获得单实例指针 class MySingleton: public Singleton<MySingleton>{ public: int GetSum(int a, int b){ return a + b; } private: // 利用 friend 获得调用 Singleton 类的 GetInstance() 方法的权限 friend class Singleton<MySingleton>; }; int main(int argc, char* argv[]) { // 无需显式创建 MySingleton 的实例,即可通过 MySingleton::GetInstance() 获得单实例指针 std::cout << "1+2=" << MySingleton::GetInstance()->GetSum(1,2) << std::endl; getchar(); return 0; }
VC2010编译通过,运行结果为:1+2=3