1.2.1 模板的右尖括号
C++11标准中要求编译器对模板的右尖括号做单独处理,使编译器能够正确判断出">>"是一个右移操作符还是模板参数表的结束标记。
1.2.2 模板的别名
重定义一个模板的语法:
template <typename Val>
using str_map_t = std::map<std::string, Val>;
str_map_t<int> map1;
在某些比较复杂的场景中using比typedef更易读易懂,比如重定义一个函数指针
typedef void (*func_t) (int, int);
using func_t = void (*) (int, int);
使用using定义模板函数:
template<typename T>
using func_t = void(*) (T, T);
func_t<int> function_name;
1.2.3 函数模板的默认模板参数
可以将默认模板参数和模板参数的自动推导结合使用。
template <typename R = int,typename U>
R func(U val)
{
return val;
}
func(123);
模板参数的填充顺序为从左往右。
func<long>(123); //func的返回值为long
当同时使用默认模板参数和自动推导时,若函数模板无法自动推导出参数类型,编译器将使用默认模板参数。