此源码将单例模式设计成类模板,以提供给所需的类使用,使用方法如下:
单例类的设计:
template<typename T>
class Singleton
{
public:
static T& Instance()
{
if (NULL == value_)
{
value_ = new T();
}
return *value_;
}
private:
Singleton();
~Singleton();
Singleton(const Singleton&);
Singleton& operator=(const Singleton&);
private:
//static pthread_once_t ponce_;
static T* value_;
};
template<typename T>
T* Singleton<T>::value_ = NULL;
单例模板的使用:
if (!Singleton<CMysqlManager>::Instance().Init(dbserver, dbuser, dbpassword, dbname))
{
LOG_FATAL << "Init mysql failed, please check your database config..............";
}
if (!Singleton<UserManager>::Instance().Init(dbserver, dbuser, dbpassword, dbname))
{
LOG_FATAL << "Init UserManager failed, please check your database config..............";
}
Singleton<EventLoopThreadPool>::Instance().Init(&g_mainLoop, 4);
Singleton<EventLoopThreadPool>::Instance().start();
注:以上init()和start()均是CMysqlManager、UserManager和EventLoopThreadPool等类的成员函数。
参考: