定义模板

函数模板:编译器根据实参类型实例化特定版本的函数

C++ Primer 笔记16. 模板与泛型编程

 

C++ Primer 笔记16. 模板与泛型编程

模板参数列表:

C++ Primer 笔记16. 模板与泛型编程

非类型模板参数:表示一个值

C++ Primer 笔记16. 模板与泛型编程

类模板:代替用户需要提供的类型或值

C++ Primer 笔记16. 模板与泛型编程

C++ Primer 笔记16. 模板与泛型编程

C++ Primer 笔记16. 模板与泛型编程

友元与类模板:

C++ Primer 笔记16. 模板与泛型编程

别名:

C++ Primer 笔记16. 模板与泛型编程

static函数:

每个实例都有自己的static成员实例

必须通过引用特定的实例来访问static成员

C++ Primer 笔记16. 模板与泛型编程

当名字表示类型时,必须用关键字typename显示标注

C++ Primer 笔记16. 模板与泛型编程

本身是模板的成员函数不能是虚函数

默认模板实参:

C++ Primer 笔记16. 模板与泛型编程

 

C++ Primer 笔记16. 模板与泛型编程

控制实例化:

避免多个文件中实例化相同模板带来的额外开销

C++ Primer 笔记16. 模板与泛型编程

 

 

模板实参推断

指定显示模板实参:

C++ Primer 笔记16. 模板与泛型编程

尾置返回类型:

C++ Primer 笔记16. 模板与泛型编程

函数指针:

C++ Primer 笔记16. 模板与泛型编程

引用折叠:

X& &, X& &&, X&& &折叠成X&

X&& &&折叠成X&&

转发:1.将函数参数定义为指向模板类型参数的右值引用,保持对应实参的所有类型信息

C++ Primer 笔记16. 模板与泛型编程

2.通过std::forward

C++ Primer 笔记16. 模板与泛型编程

 

 

重载与模板

可变参数模板:

C++ Primer 笔记16. 模板与泛型编程

 

 

模板特例化

定义:

C++ Primer 笔记16. 模板与泛型编程

部分特例化:

C++ Primer 笔记16. 模板与泛型编程

特例化成员:

C++ Primer 笔记16. 模板与泛型编程

 

相关文章: