Bootstrap

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
;