C++單例模板

在日常的開發工做中,單例是咱們常用的模式,常常咱們須要寫無數個單例類,如今提供一種單例模板: 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;	\
用法:
class A:public Singleton<A>
{
};
在cpp文件中:

template<> A* Singleton<A>::singleton_ = 0; windows

_SINGLETON_INIT(A) this

相關文章
相關標籤/搜索