C++泛型编程
C++知识点总结: 快速跳转
1. 泛型编程
泛型编程最初诞生于C++中。目的是为了实现C++的STL(标准模板库)。其语言支持机制就是模板(Templates)。模板的精神其实很简单:参数化类型。换句话说,把一个原本特定于某个类型的算法或类当中的类型信息抽掉,抽出来做成模板参数T。(参考自Baidu)
1.1 模板
- 模板就是建立同用的模具,以提高复用性,将类型参数化
- 只是一个框架,不能直接使用
- C++提供两种模板机制
- 函数模板
- 类模板
1.2 函数模板
建立一个通用函数,其函数返回值和参数类型可以不具体指定,用一个虚拟的类型代替
1.2.1 语法
template<class T>
函数声明或定义
- template:声明创建模板
- class:表明其后面的符号是一种数据类型,可用typename代替
- T :通用的数据类型,名称可用替换,通常为大写字母
1.2.2 使用函数模板方式
- 自动类型推导(必须推导出一致的数据类型T,才能使用)
- 显示指定类型(模板必须确定T的数据类型才能使用)
eg:
template<class T>//使用模板实现交换函数,T可用是int、float等
void swap(T& a,T& b){
T temp = a;
a = b;
b = temp;
}
int main(){
int a = 99;
int b = 100;
//1.自动类型推导
swap(a,b);
//2.显示指定类型
swap<int>(a,b);
}
1.2.3 普通函数和函数模板的区别
- 普通函数调用时可用发生自动类型转换(隐式类型转换)
- 函数模板调用时,如果利用自动类型推导,不会发生隐式类型转换
- 如果利用显示指定类型的方式,可用发生隐式类型转换
//函数模板
template<class T>
T Add01(T a,T b){
return a + b;
}
//普通函数
int Add02(int a,int b){
return a + b;
}
int main(){
int a = 99;
int b = 100