디자인 패턴을 공부하면서 Singleton을 가장 먼저 쓸수 있게 되었다.
그러다가 고민.. 이걸 template로 만들어서 찍어내는건 어떨까??
하면서 만들게 된게 바로 이것.
Singleton.h
#ifndef _Singleton_H_
#define _Singleton_H_
// Design Pattern : Singleton Class
template <class Single>
class CSingleton
{
private:
// Static member variable
static Single* Instance;
protected:
CSingleton();
~CSingleton();
public:
// Instance Construct
static Single* GetInstance()
{
// Notting Instance Value
if ( Instance == 0 )
{
Instance = new Single;
}
return Instance;
}
// Instance Release
static void Release()
{
if ( Instance != 0 )
{
delete Instance;
Instance = 0;
}
}
};
template <class Single>
Single* CSingleton<Single>::Instance = 0;
template <class Single>
CSingleton<Single>::CSingleton()
{
}
template <class Single>
CSingleton<Single>::~CSingleton()
{
}
#endif
위의 템플레이트를 사용하는 예제는 아래를 클릭하라.
tempClass.h
#ifndef _tempClass_h_
#define _tempClass_h_
#include "Singleton.h"
class tempClass: public CSingleton <tempclass>
{
public:
tempClass(void);
~tempClass(void);
public:
void Hello(void);
};
static tempClass* pTemp = tempClass::GetInstance();
#endif
tempClass.cpp
#include "tempClass.h"
tempClass::tempClass(void)
{
}
tempClass::~tempClass(void)
{
}
void tempClass::Hello(void)
{
printf("Hello World\n");
}
이제 이 tempClass를 사용할때는 아래처럼 사용한다.
#include "tempClass.h"
void main(void)
{
pTemp->Hello();
}
tempClass의 헤더만 추가하면 pTemp 매크로를 이용해 어디에서든지 접근이 가능하다. 물론 쓰레드 환경에서는 좀더 개선해야할 필요성이 있다.