WHCSRL 技术网

C++模板的语法以及原理

函数模板

函数模板的概念
函数模板代表了一个函数家族,该函数模板与类型无关,根据实参类产生特定的类型版本
函数模板格式

template<typename Type>
Type 函数名(Type x)
{}
  • 1
  • 2
  • 3

用交换函数作为例子:

template<typename T>
T Swap(T &a,T &b){
	T tmp = a;
	a = b;
	b = tmp;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

当两个参数为不同类型时该怎么办呢?

template<typename T>
T Add(T x1,T x2){
	return x1+x2;
}
int main(){
	//第一种方法是直接强制类型转化其中一个参数
	Add((double)10,10.5);
	//第二种是直接将类型定义好
	Add<double>(10,10.5);
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

非模板函数和其同名模板函数可以同时存在吗
答案是可以的,那么当函数调用时,调用哪一个呢?
对于非模板函数和其同名的模板函数,如果条件都相同,则调用非模板函数,如果模板函数可以产生一个更好的匹配函数,则调用模板函数

类模板

其实类模板和函数模板是没有很大差别的

template<typename T>
class Test
{};
  • 1
  • 2
  • 3

类模板中的函数放在类外进行定义时,需要加模板参数列表

推荐阅读