泛型编程与模板简单介绍,函数模板及其原理与template,typename,模板参数T,函数模板隐式实例化等

news2024/11/18 18:33:36

泛型编程

  1. 比方说现在要去实现一个通用的交换函数,以我们现在的思路,肯定是通过函数重载去解决。但是这样子的话有几个缺点:重载的函数仅仅是类型不同,代码复用率比较低,只要有新类型出现时,就需要用户自己增加对应的函数;代码的可维护性比较低,一个出错可能所有的重载均出错。
void Swap(int& left, int& right)
{
int temp = left;
left = right;
right = temp;
}
void Swap(double& left, double& right)
{
double temp = left;
left = right;
right = temp;
}
void Swap(char& left, char& right)
{
char temp = left;
left = right;
right = temp;
}
  1. 在生活当中的话,就存在着一个模具,可以给模具填充不同的材料,以此来获得不同材料的铸件。那么反应到代码里面的话,道理也是一样的:在c++当中也存在着这样一个模具,可以给这个模具当中填充不同的类型,就可以生成具体类型的代码。
    在这里插入图片描述
    在这里插入图片描述

函数模板与template,typename关键字,模板参数T

  1. 函数模板代表了一个函数家族,该函数模板与类型无关,在使用时被参数化,根据实参类型产生函数的特定类型版本
  2. 这个模板参数可以具体充当指针类型与自定义类型等在这里插入图片描述
  3. typename是用来定义模板参数关键字,也可以使用class(切记:不能使用struct代替class)

函数模板的原理

  1. 函数模板是一个蓝图,它本身并不是函数,是编译器用使用方式产生特定具体类型函数的模具。所以其实模板就是将本来应该我们做的重复的事情交给了编译器
  2. 编译器编译阶段,对于模板函数的使用,编译器需要根据传入的实参类型来推演生成对应类型的函数以供调用。比如:当用double类型使用函数模板时,编译器通过对实参类型的推演,将T确定为double类型,然后产生一份专门处理double类型的代码,对于字符类型也是如此。在这里插入图片描述

函数模板的实例化(隐式)

  1. 不同类型的参数使用函数模板时,称为函数模板的实例化。模板参数实例化分为:隐式实例化和显式实例化。
  2. 隐式实例化就是让编译器根据实参推演模板参数的实际类型
  3. 简单例子:
#include <iostream>
#include <stdlib.h>
using namespace std;
template <typename T>
void Swap(T& x, T& y)
{
	T tmp = x;
	x = y;
	y = tmp;
}
template <typename T>
T add(T x, T y)
{
	return x + y;
}
int main()
{
	int a = 10;
	int b = 20;
	Swap(a, b);
	cout << a << " " << b << endl;
	float c = 1.234;
	float d = 9.3424;
	cout << add(a, b) << endl;
	cout << add(c, d) << endl;
	return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/545175.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

水溶性花菁染料Sulfo-CY7 NHS este标记活性脂Cyanine7-NHS

Sulfo-CY7 NHS ester是一种荧光标记试剂&#xff0c;化学结构为C38H42KN3O10S2&#xff0c;分子量约为803.98 。此外&#xff0c;它的分子中还含有一个N-羟基琥珀酰亚胺酯基团&#xff0c;这个基团可以与生物分子中的氨基结合&#xff0c;从而实现荧光标记。Sulfo-CY7 NHS este…

Moonbeam联合Multichain和AWS Startups正式推出Bear Necessities Hackathon黑客松

我们很高兴宣布Bear Necessities Hackathon正式启动。本次黑客松包含7个挑战&#xff0c;超过7万美金的奖池等你来领&#xff01;我们欢迎所有的BUILDers参加&#xff0c;这是开发者们探索Moonbeam并构建跨链用例的机会&#xff01; 本次黑客松由Moonbeam、Multichain和AWS St…

js原生实现pc端日历组件

业务场景 客户要求日期选择使用pc端的样式&#xff0c;前端在x5平台上&#xff0c;也就是需要用原始html、js、css等实现&#xff0c;笔者使用于 原生javascript封装的PC端日历插件&#xff0c;不依赖任何第三方插件&#xff0c;复制的代码文件较长&#xff0c;可跳到 总结 处…

使用whistle对安卓手机进行调试

注意&#xff1a;手机调试的时候需要与电脑连同一个wifi。 1、安装whistle npm install -g whistle2、运行 whistle w2 start3、打开电脑浏览器 输入 http://10.53.40.72:8899/ &#xff0c;点击二维码&#xff0c;可以生成 rootCA.crt 证书&#xff0c;把它发到手机上&…

mysql8查看锁

一。准备环境 1.登录mysql&#xff0c;设置锁等待时间&#xff0c;然后退出。 mysql> set global innodb_lock_wait_timeout1200; Query OK, 0 rows affected (0.00 sec) 2.再次登录MySQL。打开第一个session 3.登录msyql&#xff0c;打开第二个session a&#xff1a;…

Rasa 3.x 学习系列-Rasa [3.5.8] -2023-05-12新版本发布

Rasa 3.x 学习系列-Rasa [3.5.8] -2023-05-12新版本发布 当自定义动作设置的值与槽的现有值相同时&#xff0c;将触发SlotSet事件。修复了这个问题&#xff0c;使AugmentedMemoizationPolicy能够正确地处理截断的跟踪器。 为了恢复以前的行为&#xff0c;自定义操作只有在槽值…

使用VSCode创建第一个ESP-IDF项目

1.在VSCode中安装ESP-IDF: 在 VS Code 中安装 ESP-IDF&#xff1a; 在-VS-Code-中安装-ESP-IDF、新建项目 安装过程中可能会遇到的问题&#xff1a; 解决-pip-安装第三方包时因-SSL-报错_pip-ssl error 在完全使用VSCode安装ESP-IDF环境后&#xff0c;不会存在ESP-IDF Termin…

【利用AI刷面试题】AI:十道Vue面试题巩固一下知识

文章目录 1. 你在Vue中遇到过哪些性能问题&#xff1f;如何优化这些性能问题&#xff1f;2. Vue生命周期钩子函数有哪些&#xff1f;在什么情况下使用它们&#xff1f;3. Vue组件通信方式有哪些&#xff1f;它们各自适用于哪些场景&#xff1f;4. 你了解diff算法吗&#xff1f;…

Hadoop(Yarn)

文章目录 1、Yarn 资源调度器1.1 Yarn 基础架构1.2 Yarn 工作机制1.3 作业提交全过程1.4 Yarn 调度器和调度算法1.4.1 先进先出调度器&#xff08;FIFO&#xff09;1.4.2 容量调度器&#xff08;Capacity Scheduler&#xff09;1.4.3 公平调度器&#xff08;Fair Scheduler&…

万物可卷!低代码充满想象,能打敢战

数字中国建设如火如荼&#xff0c;我们也在积极拥抱这些机会。一火再火&#xff0c;疯狂和理性并存&#xff0c;高潮迭起的低代码赛道常兴常青&#xff0c;无论如何&#xff0c;不管是否承认&#xff0c;中国低代码市场已然觉醒&#xff0c;能打敢战&#xff01; 低代码开发是…

【AI实战】给类ChatGPT的大语言模型外挂私有知识库

【AI实战】给类ChatGPT的大语言模型外挂私有知识库 原理准备环境代码下载 chatglm-6b 模型权重文件下载 Embedding 模型 GanymedeNil/text2vec-large-chinese安装依赖库我的计算资源 外挂知识库开启服务外挂知识库 测试参考 本文使用 langChain 来给大语言模型 ChatGLM-6B 外挂…

【数据结构】——排序

排序的概念及其运用 排序的概念 排序&#xff1a;所谓排序&#xff0c;就是使一串记录&#xff0c;按照其中的某个或某些关键字的大小&#xff0c;递增或递减的排列起来的操作。 稳定性&#xff1a;假定在待排序的记录序列中&#xff0c;存在多个具有相同的关键字的记录&am…

计算机图形学 | 实验八:Phong模型

计算机图形学 | 实验八&#xff1a;Phong模型 计算机图形学 | 实验八&#xff1a;Phong模型Phong模型光源设置 光照计算定向光点光源聚光 华中科技大学《计算机图形学》课程 MOOC地址&#xff1a;计算机图形学&#xff08;HUST&#xff09; 计算机图形学 | 实验八&#xff1a…

挖掘有价值的用户需求 需警惕5大误区

1、听取用户等于听从用户 在挖掘有价值的用户需求时&#xff0c;往往需要认真倾听用户的想法和需求&#xff0c;这样我们非常容易陷入到用户的思维中去。用户提到的需求&#xff0c;是他们真实想要的需求&#xff0c;但并不一定是客观需求&#xff0c;因为用户往往并不清楚他们…

【GDI+】旋转文本/斜体字

一、需求 想要绘制如下所示的斜体字&#xff0c;45度 二、分析&思路 Graphics类有个 RotateTransform方法&#xff0c;可以传入任意角度的值来旋转画板。但是这个方法的旋转中心是画板的左上角&#xff0c;所以直接单单用这个方法不能满足我们的需求。此外&#xff0c; G…

5个视频剪辑必备素材库、视频、配乐、音效全部免费下载。

推荐几个免费视频、配乐素材网站&#xff0c;可商用&#xff0c;建议收藏&#xff01; 1、菜鸟图库 https://www.sucai999.com/video.html?vNTYwNDUx 菜鸟图库网素材非常丰富&#xff0c;网站主要还是以设计类素材为主&#xff0c;高清视频素材也很多&#xff0c;像风景、植…

Jmeter响应断言

1、断言介绍 断言用于检查测试中得到的响应数据是否符合预期&#xff0c;用以保证性能测试过程中的数据交互与预期一致。 Request请求成功了&#xff0c;并不代表结果一定正确。所以通过断言&#xff0c;我们不再会被200状态码所迷惑&#xff0c;而是可以通过断言&#xff0c…

搭建新项目 前端环境 及启动项目前的相关配置

** 搭建新项目 前端环境 及启动项目前的相关配置 ** 文章目录 搭建新项目 前端环境 及启动项目前的相关配置 前言一、编程 语言及框架二、步骤1.打开 VS2.导入项目3、配置地址及 请求端口4、启动项目5、查看报错 的日志文件6、运行 命令 安装相关有依赖及 jar 包7、特别要注…

前端学习--Vue(3)初始化vue项目

一、侦听器 1.1 概念 watch 侦听器允许开发者监视数据的变化&#xff0c;从而针对数据的变化做特定的操作 <div id"app"><span>字典查询</span><input type"text" v-model.lazy"uname"></div><script src&qu…

浅析视频技术与AI智能识别技术在智慧矿山场景中的应用

一、背景分析 能源与矿业是我国国民经济的重要物质生产部门和支柱产业之一&#xff0c;同时也是一个安全事故多发的高危行业&#xff0c;施工阶段的现场管理对工程成本、进度、质量及安全等至关重要。国家矿山安监局陆续发布(矿安〔2022)128号)文、(矿安综〔2023〕5号)文推动矿…