// 클래스 X는 X 자신을 템플릿 인수로 받는 템플릿 특수화를 기반클래스로 한다
// - from C++ 템플릿 메타프로그래밍, 정보문화사
class X : public base<X>
{
};
코드 그대로..
또한, C++ 템플릿 메타프로그래밍책에 그 활용도 잘 나와 있다.
가장 많이 쓰이는것중 하나가 GPG에 나왔던 상속으로 싱글톤 기능을 수행할수 있도록 하는 코드. 아래는 오우거에서 발췌했다.
namespace Ogre {
// End SJS additions
/** Template class for creating single-instance global classes.
*/
template <typename T> class Singleton
{
protected:
static T* ms_Singleton;
public:
Singleton( void )
{
assert( !ms_Singleton );
#if defined( _MSC_VER ) && _MSC_VER < 1200
int offset = (int)(T*)1 - (int)(Singleton <T>*)(T*)1;
ms_Singleton = (T*)((int)this + offset);
#else
ms_Singleton = static_cast< T* >( this );
#endif
}
~Singleton( void )
{ assert( ms_Singleton ); ms_Singleton = 0; }
static T& getSingleton( void )
{ assert( ms_Singleton ); return ( *ms_Singleton ); }
static T* getSingletonPtr( void )
{ return ms_Singleton; }
};
}
사실, 그런갑다 하고 썼는데, 회사동료분이 활용하는것을 보고 충격먹고, 활용해먹어야지 생각하고 있다가, 다양한 활용성을 보고나서.. 정말 난 아무것도 아니구나라고 침울해져버렸던 테크닉이다. 앞으로 자주 활용해야지~