写在前面
  1. 函数模版的声明
    template<typename T>

  2. 函数模版的使用

    // 该函数模版只对其下面的一个函数有效
    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);
    }
    
  3. 注意:当声明出一个模版的时候,必须确定T的类型才能调用对应的函数

普通函数与模版函数的调用规则
  1. 如果普通函数和模版函数均满足调用条件,优先调用普通函数

  2. 可以通过空模版参数列表来强制调用模版函数

  3. 模版函数可以发生函数重载

  4. 如果模版函数可以产生更好的匹配则优先调用模版函数

    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++模版 (一) ----- 函数模版相关推荐

  1. C++ - 非类型模版参数和模版的特化

    目录 非类型模版参数 模版的特化 函数模版特化 类模版特化 全特化 半特化(偏特化) 参数更进一步的限制 非类型模版参数 在之前学过的例子来看,我们使用模版,它们的参数都是类型模版,根据类型来决定实例 ...

  2. C++ 泛型编程 -- 函数模版

    文章目录 定义 声明 调用方式 函数模版的重载 函数模版的特点 工作中一个同事写了测试demo,想要自己尝试使用发现调用老出错,请教的时候发现是函数模版,有自己的调用方式,并且发现核心代码中大量的函数 ...

  3. thinkphp模版调用函数方法

    原文:thinkphp模版调用函数方法 {变量|函数1|函数2|函数3=参数1,参数2,参数3,###} ###为第4个参数,代表变量替换为第4个参数 举例: {$username|substr=0, ...

  4. hdu 1286 找新朋友 欧拉函数模版题

    找新朋友 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Problem Des ...

  5. 函数 的 重载 和 函数 模版

    1 //函数的重载对一个函数名 赋予它 多重意义 就成为函数的重载 2 //在函数重载的基础上 我们仍然对那种 实现功能相似 3 // 但是 函数类型和形参不确定的 情况下 产生了 函数 模版 4 # ...

  6. 实用经验 92 区分函数模版与模版函数,类模版和模板类

    模板就是实现代码重用机制的一种工具,它可实现类型参数化,即把类型定义为参数, 从而实现了代码的可重用性.模版可以分为两类,一个是函数模版,另外一个是类模版.在使用模板概念时,经常会遇到这4个概念:函数 ...

  7. Go text模版和HTML模版【Go语言圣经笔记】

    text模版和HTML模版 如果只是最简单的格式化,使用Printf是完全足够的.但是有时候会需要复杂的打印格式,这时候一般需要将格式化代码分离出来以便更安全地修改.这些功能是由text/templa ...

  8. 淘宝客5.44+代理2.68+京东客5.1教程-解密全开版-附带小程序模版-微赞模版

    淘宝客5.44+代理2.68+京东客5.1教程-解密全开版-附带小程序模版-微赞模版淘宝客5.44+代理2.68+京东客5.1教程-解密全开版-附带小程序模版-微赞模版淘宝客5.44+代理2.68+京 ...

  9. 用友uap nc65开发-输出模版(打印模版)开发介绍

    用友uap nc65开发-输出模版(打印模版)开发介绍 1.重点讲解打印模版,主要内容有:如何建立一个打印模版,将打印模版关联节点,编辑打印模版. 2.如何建立一个打印模版: 一般在向导生成节点过程中 ...

最新文章

  1. 张钹、高文、杨强同台论道“AI精度与隐私的博弈
  2. 北京内推 | 微软亚洲研究院机器学习组招聘AI for Health实习生
  3. CharSequence类
  4. 【AI视野·今日NLP 自然语言处理论文速览 第七期】Tue, 15 Jun 2021
  5. ArcGIS 9.3/9.3.1 客户端 API 更新信息--2009年5月
  6. “iQOO”怎么读?vivo官宣“发音”视频
  7. JOIN查询流程与驱动表
  8. 原生M1 Sketch for mac(专业矢量绘图设计) v86中文激活版功能介绍,支持最新的monterey系统
  9. android mtklog,Mtklog结构及分析
  10. chrome最简单的多开方法
  11. 网口压线顺序_网线水晶头接法口诀顺序及接法详细步骤
  12. 【渝粤题库】陕西师范大学165203 社会保险学 作业(专升本)
  13. SQL in 模糊查询的问题
  14. #计划# 机器视觉 #视觉增强 #python #数据库 #算法 #深度学习 #迁移学习 #matlab #数据融合
  15. 关于strrchr函数的用法
  16. C++中对字符串的操作
  17. 日本向英国及欧盟发出要求,称英国脱欧不可对云服务造成影响
  18. 哈尔滨工业大学计算机考研复试分数线,34所自划线院校2021考研复试分数线-2021哈尔滨工业大学考研分数线已公布...
  19. 个体户报税流程如何?需要交哪些税
  20. CAN通讯-使用Python收发CAN数据保姆级教程(包含完整代码)

热门文章

  1. 插入排序,二分查找插入排序,使用二叉树的插入排序
  2. CQOI 2016 不同的最小割
  3. CROC-MBTU 2012, Elimination Round (ACM-ICPC) H DP题目
  4. LINQ IN ACTION读书笔记:LINQ 使用连接 1、组连接 2、内连接 3、左外连接 4、交叉连接 使用和区别...
  5. Linux操作Oracle(5)——Oracle11g 卸载OPatch安装补丁的方法【rollback已安装的补丁】及报错问题解决
  6. linux_负载分析之LoadAverage
  7. python笔记06_进程vs线程
  8. 人人都在讲数据治理而不问业务,这很危险
  9. 主流的数据可视化工具介绍
  10. 创建django项目,8月版本