C++模版 (一) ----- 函数模版
写在前面
函数模版的声明
template<typename T>
函数模版的使用
// 该函数模版只对其下面的一个函数有效 template <typename T> void swap(T& a, T& b) {T temp = a;a = bb = temp; }void main() {// 1. 自动类型推导 int a = 10, b = 5; swap(a, b);// 2. 显示指定类型 swap<int>(a, b); }
注意:当声明出一个模版的时候,必须确定T的类型才能调用对应的函数
普通函数与模版函数的调用规则
如果普通函数和模版函数均满足调用条件,优先调用普通函数
可以通过空模版参数列表来强制调用模版函数
模版函数可以发生函数重载
如果模版函数可以产生更好的匹配则优先调用模版函数
void print(int a, int b) {cout << "调用普通函数" << endl; }template <typename T> void print(int a, int b) {cout << "调用模版函数" << endl; }// 模版函数之间发生函数重载 template <typename T> void print(int a, int b, int c) {cout << "调用模版函数" << endl; }void main() {// 优先调用普通函数print(10, 5);// 通过空模版参数列表来强制调用模版函数print<>(10, 5);// 模版函数重载print(10, 5, 0);// 如果模版函数可以产生更好的匹配则优先调用模版函数char c1 = 'a', c2 = 'b';print(c1, c2);// 此时会调用模版函数,因为模版函数比普通函数产生更好的匹配 (无类型转换) }
模版的局限性
template <typename T>
void f(T &a, T &b) {a = b;
}
如果T是数组或Person对象则无法实上述函数,但是C++为了解决这种问题,提供了模版重载,可以为这些类型提供具体化的模版
class Person {public:int age;string name;Person(int age, string name) {this->age = age;this->name = name;}
};template <class T>
bool isEquals(T& a, T& b) {return a == b;
}// 模版重载,当T为Person类型时则会执行该代码
template <> bool isEquals(Person& p1, Person& p2) {return p1.age == p2.age && p1.name == p2.name;
}int main() {Person p1(18, "dudu");Person p2(18, "dudu");cout << isEquals(p1, p2) << endl;
}
C++模版 (一) ----- 函数模版相关推荐
- C++ - 非类型模版参数和模版的特化
目录 非类型模版参数 模版的特化 函数模版特化 类模版特化 全特化 半特化(偏特化) 参数更进一步的限制 非类型模版参数 在之前学过的例子来看,我们使用模版,它们的参数都是类型模版,根据类型来决定实例 ...
- C++ 泛型编程 -- 函数模版
文章目录 定义 声明 调用方式 函数模版的重载 函数模版的特点 工作中一个同事写了测试demo,想要自己尝试使用发现调用老出错,请教的时候发现是函数模版,有自己的调用方式,并且发现核心代码中大量的函数 ...
- thinkphp模版调用函数方法
原文:thinkphp模版调用函数方法 {变量|函数1|函数2|函数3=参数1,参数2,参数3,###} ###为第4个参数,代表变量替换为第4个参数 举例: {$username|substr=0, ...
- hdu 1286 找新朋友 欧拉函数模版题
找新朋友 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Problem Des ...
- 函数 的 重载 和 函数 模版
1 //函数的重载对一个函数名 赋予它 多重意义 就成为函数的重载 2 //在函数重载的基础上 我们仍然对那种 实现功能相似 3 // 但是 函数类型和形参不确定的 情况下 产生了 函数 模版 4 # ...
- 实用经验 92 区分函数模版与模版函数,类模版和模板类
模板就是实现代码重用机制的一种工具,它可实现类型参数化,即把类型定义为参数, 从而实现了代码的可重用性.模版可以分为两类,一个是函数模版,另外一个是类模版.在使用模板概念时,经常会遇到这4个概念:函数 ...
- Go text模版和HTML模版【Go语言圣经笔记】
text模版和HTML模版 如果只是最简单的格式化,使用Printf是完全足够的.但是有时候会需要复杂的打印格式,这时候一般需要将格式化代码分离出来以便更安全地修改.这些功能是由text/templa ...
- 淘宝客5.44+代理2.68+京东客5.1教程-解密全开版-附带小程序模版-微赞模版
淘宝客5.44+代理2.68+京东客5.1教程-解密全开版-附带小程序模版-微赞模版淘宝客5.44+代理2.68+京东客5.1教程-解密全开版-附带小程序模版-微赞模版淘宝客5.44+代理2.68+京 ...
- 用友uap nc65开发-输出模版(打印模版)开发介绍
用友uap nc65开发-输出模版(打印模版)开发介绍 1.重点讲解打印模版,主要内容有:如何建立一个打印模版,将打印模版关联节点,编辑打印模版. 2.如何建立一个打印模版: 一般在向导生成节点过程中 ...
最新文章
- 张钹、高文、杨强同台论道“AI精度与隐私的博弈
- 北京内推 | 微软亚洲研究院机器学习组招聘AI for Health实习生
- CharSequence类
- 【AI视野·今日NLP 自然语言处理论文速览 第七期】Tue, 15 Jun 2021
- ArcGIS 9.3/9.3.1 客户端 API 更新信息--2009年5月
- “iQOO”怎么读?vivo官宣“发音”视频
- JOIN查询流程与驱动表
- 原生M1 Sketch for mac(专业矢量绘图设计) v86中文激活版功能介绍,支持最新的monterey系统
- android mtklog,Mtklog结构及分析
- chrome最简单的多开方法
- 网口压线顺序_网线水晶头接法口诀顺序及接法详细步骤
- 【渝粤题库】陕西师范大学165203 社会保险学 作业(专升本)
- SQL in 模糊查询的问题
- #计划# 机器视觉 #视觉增强 #python #数据库 #算法 #深度学习 #迁移学习 #matlab #数据融合
- 关于strrchr函数的用法
- C++中对字符串的操作
- 日本向英国及欧盟发出要求,称英国脱欧不可对云服务造成影响
- 哈尔滨工业大学计算机考研复试分数线,34所自划线院校2021考研复试分数线-2021哈尔滨工业大学考研分数线已公布...
- 个体户报税流程如何?需要交哪些税
- CAN通讯-使用Python收发CAN数据保姆级教程(包含完整代码)
热门文章
- 插入排序,二分查找插入排序,使用二叉树的插入排序
- CQOI 2016 不同的最小割
- CROC-MBTU 2012, Elimination Round (ACM-ICPC) H DP题目
- LINQ IN ACTION读书笔记:LINQ 使用连接 1、组连接 2、内连接 3、左外连接 4、交叉连接 使用和区别...
- Linux操作Oracle(5)——Oracle11g 卸载OPatch安装补丁的方法【rollback已安装的补丁】及报错问题解决
- linux_负载分析之LoadAverage
- python笔记06_进程vs线程
- 人人都在讲数据治理而不问业务,这很危险
- 主流的数据可视化工具介绍
- 创建django项目,8月版本