在日常的開發工做中,單例是咱們常用的模式,常常咱們須要寫無數個單例類,如今提供一種單例模板: linux
#pragma once // common include #include <stdio.h> #include <stdlib.h> #include <assert.h> // windows include #if defined _WIN32 #else // linux include #include <errno.h> #endif template <typename T> 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>*)(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; windows
_SINGLETON_INIT(A) this