템플릿 선언에서 “이것은 템플렛으로 사용되도록 넘겨진다”를 선언 하는것이 TTP 이다.
template<template <class T> class X> class A { };
template<class T> class B { };
A<B> a;
살펴볼점이, B가 template 임에도 불구하고 a를 선언하는 시점에서는 B를 템플릿으로 안써야 된다는것.
또, class A의 인자는 템플릿에어야 한다는것.
이점을 ModernC++디자인에서는 단위전략클래스(PolicyClass)라는 곳에서 효과적으로 이용한다.
class Widget;
template <template <typename T> class TemplateParam>
class TTP
{
TemplateParam<Widget> a;
};
template < typename T >
class TemplateParamA
{
};
class TemplateParamB
{
};
int main(int argc, char* argv[])
{
TTP<<emplateParamA> a;
//TTP<TemplateParamB> b; //compile error!
return 0;
}
위의 코드를 보면, 템플릿템플릿 인자를 통해 헤더 의존성을 줄일수 있고, 템플릿 특화에서도 템플릿템플릿 인자를 사용할수 있을듯하다.