在平常的开发工作中,单例是我们经常使用的模式,经常我们需要写无数个单例类,现在提供一种单例模板:
#pragma once// common include#include用法: class A:public Singleton<A> { }; 在cpp文件中:#include #include // windows include #if defined _WIN32#else// linux include#include #endif template class Singleton{protected: static T* singleton_;public: Singleton(void) { assert(!singleton_);#if defined(_MSC_VER) && _MSC_VER < 1200 int offset = (int)(T*)1 - (int)(Singleton *)(T*)1; singleton_ = (T*)((int)this + offset);#else singleton_ = static_cast< T* >(this);#endif } ~Singleton(void){ assert(singleton_); singleton_ = 0; } static T& getSingleton(void) { assert(singleton_); return (*singleton_); } static T* getSingletonPtr(void){ return singleton_; }};#define _SINGLETON_INIT( TYPE ) \template <> TYPE * Singleton< TYPE >::singleton_ = 0; \
template<> A* Singleton<A>::singleton_ = 0;
_SINGLETON_INIT(A)