一、泛型编程
泛型编程是指编写与类型无关的通用代码,是代码复用的一种重要手段。模板是泛型编程的基础。
以两个数的交换为例,若需支持不同类型的数据,在 C 语言中只能通过定义不同的函数实现;而在 C++ 中,早期版本只能利用函数重载来实现同一函数名调用不同函数。
void Swap(int& left, int& right) {
int temp = left;
left = right;
right = temp;
}
void Swap(double& left, double& right) {
double temp = left;
left = right;
right = temp;
}
void Swap(char& left, char& right) {
char temp = left;
left = right;
right = temp;
}
上述代码虽然实现了功能,但代码复用率较低。模板可以解决这一问题。
2.1 函数模板的定义与使用方式
概念:函数模板代表了一个函数家族,该函数模板与类型无关,在使用时被参数化,根据实参类型产生函数的特定类型版本。
模板参数:使用 template <typename T> 或 template <class T> 声明。T 是一个占位符类型(称为类型参数),代表在编译时将被实际类型替换掉。可以使用多个类型参数(如 template <typename T, typename U>)。
通用函数定义:在模板声明之后,定义一个函数。在这个函数的参数、返回值或函数体内,使用占位符类型 T 来代替具体的类型。
template<class T>
void Swap(T& x1, T& x2) {
T x = x1;
x1 = x2;
x2 = x;
}
注意:typename 是用来定义模板参数的关键字,也可以使用 class(切记:不能使用 struct 代替 class)。
2.2 函数模板的原理
template<class T>
void {
T x = x1;
x1 = x2;
x2 = x;
}
{
a = ; b = ;
(a, b);
c = ; d = ;
(c, d);
;
}


