C++:函数模板的初识

模板大致可以分为函数模板和类模板两种类型,函数模板是算法库的基础,类模板是建立标准库容器和迭代器的基础。这一小节跟随小编来一起深入的了解函数模板的相关知识。
问题引入
在进行编程时,我们该如何编写一个通用的加法函数,交换函数…这些呢?
我们可以使用重载函数的方式进行实现,但重载函数只是类型不同,代码的复用率和可维护性都很低。

int Add(int left, int right)
{
	return left + right;
}

int Add(double left, double right)
{
	return left + right;
}

int main()
{
	Add(1, 0);
	Add(1.0, 2.0);
	return 0;
}

所以这个时候就需要泛型编程,编写一段通用的逻辑,可以把任意类型的变量传进去处理。泛型编程弥补了这个缺点,通过把通用逻辑设计为模板,摆脱了类型的限制,提供了继承机制以外的另一种抽象机制,极大地提升了代码的可重用性。

函数模板定义

用户将不同类型的公共逻辑抽象处理为函数,就得到了函数模板。函数模板不是真实存在的一个函数,是用户自身制定的一个规则,该函数与其类型无关,当它具体执行时,将根据传递的实际参数决定其功能。

函数模板格式

template
返回值类型 函数(参数列表){ }
例如:

template<class T1,class T2>//class也是一个类可以代替T进行使用
template<typename T1,typename T2>
template<class T1,typename T2>

注意class也可以进行使用哦
这样我们就可以将上面的代码改为通用的加法函数了:

template<typename T>
T Add(T left,T right)
{
	return left + right;
}

函数模板的实例化

在编译器编译阶段,在使用函数模板时,编译器需要根据传入的实参类型来推演生成对应函数以及调用,例如:double类型使用时,编译器会对实参类型进行推演,将函数模板T确定为double类型,然后生成处理double类型的代码。
我们将上面这一处理识别的过程称之为函数模板的实例化。其类型分为隐式实例化和显式实例化。关于实例化的部分小编会加快更新,在下一篇中会进行仔细讲解。

你可能感兴趣的:(C++)