template <typename T, int a>
typename为关键字,T为类型名,int a为非类型参数,表示一个值而非一个类型
模板头文件通常包括声明和定义,原理与宏类似
函数模板,编译器可以帮助推断模板参数类型,但是类模板不能推断参数类型.必须使用尖括号提供额外信息.
类模板的成员函数只有当使用到时才进行实例化,如果没有被使用,则不会被实例化.
模板声明,和普通声明一样,只是在前面加上 template <typename T>
通过作用于访问的名字都不是类型,如果希望是一个类型,使用关键字 typename 来说明
return typename T::value_type();
成员模板,不能使虚函数,成员数是模板.
模板被使用时才会进行实例化,意味着相同的实例可能出现在多个对象文件中.可以通过显示实例化来避免这种开销.
置尾返回类型可以用类型推断.
如果一个函数参数是指向末班参数类型的右值引用(T&&),则可以传递左值或右值的实参.并且对应的实参const属性和左值/右值属性将得到保持.
可以转换从一个左值到一个右值, 使用static_cast
可变参数模板,扩展,转发
模板重载,特例化