五十六、函数模板的概念和意义
1、发散性问题
C++中有几种交换变量的方法?
2、交换变量的方法
定义宏代码块 VS 定义函数
3、编程实验:变量的交换
4、交换变量的方法
- 定义宏代码块
- 优点:代码复用,适合所有的类型
- 缺点:编译器不知道宏的存在,缺少类型检查
- 定义函数
- 优点:真正的函数调用,编译器对类型进行检查
- 缺点:根据类型重复定义函数,无法代码复用
5、新的需求
C++中有没有解决方案集合两种方法的优点?
6、泛型编程
- 泛型编程的概念
- 不考虑具体数据类型的编程方式
对于Swap函数可以考虑下面的泛型写法
Swap泛型写法中的T不是一个具体的数据类型,而是泛指任意的数据类型。
- C++中泛型编程
- 函数模板
- 一种特殊的函数可用不同类型进行调用
- 看起来和普通函数很相似,区别是类型可被参数化
- 函数模板
7、函数模板
- 函数模板的语法规则
- template关键字用于声明开始进行泛型编程
- typename关键字用于声明泛指类型
- 函数模板的使用
- 自动类型推导调用
- 具体类型显示调用
8、编程实验:函数模板使用初探
9、小结
- 函数模板是泛型编程在C++中的应用方式之一
- 函数模板能够根据实参对参数类型进行推导
- 函数模板支持显示的指定参数类型
- 函数模板是C++中重要的代码复用方式
五十七、深入理解函数模板
1、函数模板
- 函数模板深入理解
- 编译器从函数模板通过具体类型产生不同的函数
- 编译器会对函数模板进行两次编译
- 对模板代码本身进行编译
- 对参数替换后的代码进行编译
- 注意事项
- 函数模板本身不允许隐式类型转换
- 自动推导类型时,必须严格匹配
- 显示类型指定时,能够进行隐式类型转换
- 函数模板本身不允许隐式类型转换