It's just like pok    version4


묘하게 되풀이되는 템플릿 패턴(CRTP : Curiously Recurring Template Pattern)

 | 


// 클래스 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; }
    };
}

사실, 그런갑다 하고 썼는데, 회사동료분이 활용하는것을 보고 충격먹고, 활용해먹어야지 생각하고 있다가, 다양한 활용성을 보고나서.. 정말 난 아무것도 아니구나라고 침울해져버렸던 테크닉이다. 앞으로 자주 활용해야지~

CRTP와 멤버함수포인터
MKSeo 님의 CRTP 글


프로그래밍 하드보일드