CRTP

Curiously Recurring Template Pattern(CRTP; 이상한 재귀 템플릿 패턴)
패턴이지만, 디자인 패턴으로서의 자격 있다고 하기는 어려움

자기 자신을 베이스 클래스의 템플릿 인자로 상속받는다.
struct Foo: SomeBase<Foo>{
// ...
};
자기 자신의 클래스를 베이스 클래스의 템플릿 인자로 상속받을 경우,
베이스 클래스 구현부에서 타입이 지정된 this 포인터를 사용하게 할 수 있다.
template <typename Derived>
struct someBase{
void foo(){
for(auto& item: *static_cast<Derived*>(this)){
// ... // Base Subclass this
}
}
};