C++之函数模板

2023年 12月 13日 45.7k 0

为什么需要模板

相信写过Java的童鞋们都知道泛型编程,在C++中与之对应的就是模板。

模板是一种对类型进行参数化的工具,通常有两种形式:函数模板和类模板。

模板是一些为多种类型而编写的函数和类,而且这些类型都没有指定。当使用模板的时候,你只需要把所希望的类型作为一个(显式或者隐式的)实参传递给模板。 另外,由于模板是语言本身所具有的特性,所以它完全支持类型检查和作用域。使用模板的目的就是能够让程序员编写与类型无关的代码,尽可能地减少重复代码。

众所周知,C++是一门强类型的静态语言。在声明变量、函数和大多数其他类型的实体的时候,C++要求我们使用指定的类型。 然而,对于许多代码,除了类型不同之外,其余的代码看起来都是相同的。例如我们需要实现一个交换两个变量的函数,为了通用性, 这个交换变量的函数不能固定两个变量的类型,这就使得模版横空出世。。。

在C++标准库中,几乎所有的代码都是模板代码,可以说没有C++模板就没有STL。

模板函数

首先我们看下函数模板的格式:

template  
返回类型 函数名(参数列表)
{
    函数体
}

或者使用class关键字也可:

template   
返回类型 函数名(参数列表)
{
    函数体
}

为什么会有两种不同的格式呢?这是因为鉴于历史的原因,你可能还会使用class取代typename,来定义类型参数。 在C++语言的演化过程中,关键字typename的出现相对较晚一些;在它之前,关键字class是引入类型参数的唯一方式,并一直作为有效方式保留下来。 但是更加标准的格式是使用typename关键字。

例如我们使用模板定义了返回较大值的模板函数:

template 
const T& max_fun(const T& a,const T& b){
    return a >= b? a:b;
}

下面我们调用一下我们定义的模板函数max_fun:

int main(int argc, char* argv[]) {
// 都是int类型 ok
int max = max_fun(10,10);
// 都是double类型 ok
int max = max_fun(10,10);
// 一个int类型,一个double类型 编译不通过
int max = max_fun(10,11.0);
std::cout

相关文章

JavaScript2024新功能:Object.groupBy、正则表达式v标志
PHP trim 函数对多字节字符的使用和限制
新函数 json_validate() 、randomizer 类扩展…20 个PHP 8.3 新特性全面解析
使用HTMX为WordPress增效:如何在不使用复杂框架的情况下增强平台功能
为React 19做准备:WordPress 6.6用户指南
如何删除WordPress中的所有评论

发布评论