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();
}
가상함수 없이 저렇게도 구현하는게 꽤 신박해보인다.
가상함수가 많이 쓰이는 곳에서 구현하면 꽤 나쁘지 않을지도?
'C++' 카테고리의 다른 글
[Idiom] 반환 값 최적화 (RVO), 이름있는 반환 값 최적화(NRVO) (1) | 2025.02.12 |
---|---|
[Idiom] 보편참조와 퍼펙트포워딩 (0) | 2025.02.12 |
[Idiom] 언리얼엔진에서 배워온 TypeDispatch (0) | 2025.02.12 |
얕은 복사, 깊은 복사? (0) | 2022.11.29 |
스마트 포인터, 강참조와 약참조 (0) | 2022.11.26 |