P11:模板模板参数
template<typename T,
template<class
T> --------------->class替换成typename,并且这个参数类型与XC1S的第一个参数类型一样,所以可以不用写class Container
>
class XC1S
对于XC1S类模板,第二个参数也是一个类模板------------->模板模板参数template template parameter
Container一定是模板,才能被<>作用
对于左面单独的程序,编译会通过,因为是模板,参数都未定,编译的只是基本的语法,不知道真的有东西传进来的时候,绑定参数,编译是否会通过,不一定;最开始通过,只是粗浅的通过,当传进来参数的时候,才是更严苛的;但是一旦开始真正的调用这个模板的时候,会报错
报错信息:第二个参数即模板参数列不稳定,是因为应该有两个参数,(对于普通的模板,第二个参数有默认值,编译器可以为我们推导),因此对于模板模板参数这种情况,编译器没法为我们推导第二个参数(_Alloc的默认值以第一个参数为参数)的默认值
template<typename _Tp,typename _Alloc = std::allocator<_Tp>>--------------->_Alloc的默认值以第一个参数为参数
因此没法推导出template<class>class Container的第二个默认参数
模板化名alias
XC1S<MyString,vec>c1; //vec使用了模板化名
template<typanema T> using vec = vector<T,allocator<T>>