C++中函数模板的用法

马谦马谦马谦
马谦马谦马谦
马谦马谦马谦
611
文章
12
评论
2018年3月5日23:05:19 评论

模板是C++中一个重要的部分,也是泛型编程的基础,一个模板就是一个创建类或函数的蓝图,使用它在很多时候都能给我们带来巨大的便利。

一、函数模板

定义一个函数模板的语法为:

模板以关键字template 开始,后面跟一个模板参数列表,和函数的形参一样,参数列表可以是多个以逗号隔开的一个或多个参数,外部用<> 包起来。

T 代表一种数据类型,可以为任意的内置类型或自定义类,只要该类型实现了函数重载,就可以通过compare() 函数进行比较。

例如:

执行后输出:

二、模板实例化

当我们调用一个函数模板时,编译器会根据我们的形参类型创建一个特定类型的函数,这个过程就叫模板实例化。例如使用两个int 类型的变量进行比较,编译器就会对上面的模板创建一个int 对象的新实例:

使用vector 则创建一个 compare(const vector<int>&, const vector<int>&) 实例。

三、模板类型参数

compare 函数中使用了T 类型,在模板函数中T 被称为类型参数,一般情况下,我们可以直接把T 当作一种普通的数据类型。可以对T 在内部进行运算、类型转换以及作为函数参数返回。

四、typename和class

在模板函数声明中,typenameclass 两个关键字的含义相同,可以互换使用。

相比之下,typename 是模板在广泛使用之后才引入C++ 的,算是两者之间地一个小区别。

马谦马谦马谦
  • 本文由 发表于 2018年3月5日23:05:19
  • 转载请务必保留本文链接:https://www.dyxmq.cn/program/code/c-cpp/the-usage-of-cpp-template-function.html
给socket分配随机端口 C/C++

给socket分配随机端口

客户端的socket不需要手动执行bind绑定地址,但这不意味着客户端socket真的不需要绑定端口,实际上是内核它帮我们做了这个操作,在执行connect时,内核发现没有绑定端口,就会自动选择一个合...
vector中emplace_back方法的用途 C/C++

vector中emplace_back方法的用途

在写代码的过程中,CLion提醒我把push_back方法替换成emplace_back方法: 代码中我的想法是使用vector创建一个二维数组,并提前分配好空间,避免后序频繁扩容增加时间复杂度。 e...
宏定义踩坑实战:嵌套调用宏定义 C/C++

宏定义踩坑实战:嵌套调用宏定义

问题背景:在刷题的过程中,要使用min函数,但是线上OJ并没有这个函数。因为一时也想不起它到底属于哪个头文件,所以为了偷懒,顺手就写下了以下宏定义: #define min(x, y) (x) <...
匿名

发表评论

匿名网友 填写信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: