template <class T>
class Singleton
{
public:
static inline T& instance()
{
static T _instance;
return _instance;
}
private:
Singleton(void);
~Singleton(void);
Singleton(const Singleton<T>&);
Singleton<T>& operator= (const Singleton<T> &);
};
typedef Singleton<ServiceManger> SSManger;
int _tmain(int argc, _TCHAR* argv[])
{
SSManger::instance()->Run();
}
把模板类的构造函数放在私有段里了,如果放在protected段里就好得多,因为你的类可以从模板类继承,这样就不再需要你的那个 typedef Singleton<ServiceManger> SSManger;定义了。示例如下:
template <class T>
class Singleton {
public:
static T& instance() {
static T _instance;
return _instance;
}
protected:
Singleton(void) {}
virtual ~Singleton(void) {}
Singleton(const Singleton<T>&); //不实现
Singleton<T>& operator= (const Singleton<T> &); //不实现
};
--------------------------------
下面是一个需要做为单例的类,只需从Singleton继承即可
class Test : public Singleton<Test> {
public:
void foo();
private:
Test();
~Test();
friend class Singleton<Test>;
};
----------------------
这样,别人在使用的时候,只需要写
Test::instance().foo();
而再也不需要写:
Singleton<Test>::instance().foo();
或者
typedef Singleton<Test> STest;
STest::instance().foo();
转自:http://www.cppblog.com/dyj057/archive/2005/09/20/346.html