본문 바로가기
C++

[idiom] CRTP

by PainDiver 2025. 2. 12.

CRTP는 Curiously Recurring Template Pattern 의 준말로 템플릿클래스에서 사용하는 패턴이라고 한다.

핵심만 말하자면 베이스 함수에서 자식의 함수를 사용하는 패턴인데

왜 그렇게 하냐면 그렇게하면 가상함수를 대신 할 수 있다.

가상함수는 함수 콜 시 오버헤드가 더 크기때문에 이걸 피하려고 만든 패턴인것 같아보였다.

 

코드는 다음과 같다

template<typename T>
class Base
{
    void Execute()
    {
    	static_cast<T*>(this)->Implementation();
    }
}


class Derived : Base<Derived>
{
    void Implementation()
    {
    	// 오! 굿
    }
}


int main()
{
    Derived d;
    d.Execute();
}

가상함수 없이 저렇게도 구현하는게 꽤 신박해보인다.

가상함수가 많이 쓰이는 곳에서 구현하면 꽤 나쁘지 않을지도?