1.模板的右尖括号>>
C11模板的多个右尖括号需要一个空格符fun<A<> >,之前连在一起是右移操作符
C11特性优化了这个fun<A<>>
2.模板的默认参数
函数模板能添加模板参数 template <typename T = int>
类模板参数多个时,必须从右往左添加默认参数;函数模板多参时,都可以
模板参数的优先级(从高到低):
1.显示指定参数类型
2.使用推导的参数类型
3.默认的模板参数类型
4.没有默认也不能推导除参数类型,则会报错
3.using与typedef
using与typedef定义类型的别名,不会创建新的类型
定义基础类型一样
typedef int int111;//typedef 旧的类型名 新的类型名(别名)
using int222 = int;//using 新的类型名(别名)= 旧的类型名
定义函数指针时,using更直观
typedef int(*funcc)(int, string);
using funccc = int(*)(int, string);//可读性
定义模板时,using能直接使用,typedef需要在定义外套一个类或者结构体
template <typename T>
//typedef ds<int, T> Ds;
//使用typedef时,需要使用class或者struct外包一层
struct MyStruct1
{
typedef map<int,T> Ds;
};
template <typename T>
using Um = map<int, T>;
4.可变参的模板函数
a.申明及调用
b.参数包的展开-递归
c.参数包的展开-非递归
5.可变参的模板类
a.参数包的展开-模板类继承方式
b.参数包的展开-模板类递归和特化方式