看下面描述。
基类singleton
template<class T>
class singleton
{
static T* ms_Singleton;
public:
singleton(void)
{
assert(!ms_Singleton);
int offset = (int)(T*)1-(int)(singleton<T>*)(T*)1;
ms_Singleton = (T*)((int)this+offset);
}
~singleton()
{
assert(ms_Singleton);
ms_Singleton = 0;
}
static T& GetSingleton(void)
{
assert(ms_Singleton);
return (*ms_Singleton);
}
static T* GetSingletonPtr(void)
{
return ms_Singleton;
}
};
template<class T>
T* singleton<T>::ms_Singleton = 0;
派生类
class A : public singleton<A>
{
public:
void outputA() {cout << "10";}
};
使用
static A g_A;
int main()
{
A::GetSingleton().outputA();
return 0;
}
整个来说就是一个比较好的模式。
没有评论:
发表评论