介绍

C++提供函数模板(function template)。所谓的函数模板,实际上是建立一个通用函数,其函数的类型和形参类型不具体制定,有一个虚拟的那类型来代表。这个通用函数就成为函数模板。凡是函数体相同的函数都可以用这个模板来代替,不必定义多个函数,只需在末班中定义一次即可。在调用函数时,系统会根据形参的类型来取代模板的虚拟类型,从而实现了不同函数的功能。

  1. C++ 提供两种模板机制: 函数模板,类模板来进行泛型编程

  2. 类属 – 类型参数化,又称参数模板

    使程序(算法)可以从逻辑功能上抽象,把被处理的对象(数据)类型作为参数传递。

总结:

  • 模板把函数或类要处理的数据类型参数化,表现为参数的多态性,成为类属
  • 模板用于表达逻辑的结构相同,但具体数据元素类型不同的数据对象的通用行为。
  • 让算法和数据类型分离

函数模板

为什么要有函数模板

当函数业务逻辑相同但参数不同时,我们就需要用到函数模板。

函数模板做函数参数的本质是类型参数化,好处就是可以编写与类型无关的代码;

注意:模板的声明或定义只能在全局,命名空间或类范围内进行。即不能在局部范围,函数内进行,比如不能在main函数中声明或定义一个模板。

定义函数模板的语法格式如下所示:

1
2
3
4
5
template<typename 形参名,typename 形参名...>
返回值类型 函数名(参数列表)
{
函数体;
}

显式实例化

语法格式如下所示

1
template 函数返回值类型 函数名<实例化的类型>(参数列表);

注意这是声明语句,要以分号结束,<>中是显式实例的数据类型,即要实例化出一个什么类型的函数,例如,显示实例化为int,则在调用时,不是int类型的数据会转换为int类型进行计算。