/////////////////////////////////////////////////////////////////////////////
//===========================================================================
template<typename T>
class Singleton : public T
{
protected:
Singleton();
public:
static Singleton<T>& Instance(void);
};
//===========================================================================
template<typename T>
Singleton<T>::Singleton ()
{
}
template<typename T>
Singleton<T>& Singleton<T>::Instance(void)
{
static Singleton<T> single_instance;
return single_instance;
}
/////////////////////////////////////////////////////////////////////////////
//===========================================================================
class TestTaskData
{
...
};
/////////////////////////////////////////////////////////////////////////////
//===========================================================================
template class Singleton<TestTaskData>;
명시적으로 템플릿 클래스의 오브젝트 코드를 생성하기 위해서는(Explicit template instantiation)
위의 코드를 cpp에 추가 하면 해당 cpp의 오브젝트 파일에 생성된다.
참고사항>
# gcc에서 컴파일 옵션 template instantiation
-fimplicit-templates : 묵시적 템플릿 인스턴티에이션을 사용 (템플릿 클래스의 인라인화)
-fno-implicit-templates : 묵시적 템플릿 인스턴티에이션을 사용 안함
-frepo : rpo 파일을 통해서 템플릿 인스턴스 db를 생성해서 자동으로 처리
여담>
1. STL 쓰면서 -fno-implicit-templates 옵션 사용하면 죽음이다.
2. msvc++ 생각보다 똑똑한 녀석이었다. ~_~;
3. #pragma interface 와 implementation 살펴보자.