2023-2-19-What is ‘ template<typename E, E V> ‘?
目录
- C++里面template怎么用
- inline函数模板
- 类模板
- 函数模板特化
C++里面template怎么用
template是什么?
template其实是C++的一种语法糖,本意是去简化程序员的工作.
void swap(int *a,int *b){int temp = *a;*a = *b;*b = temp;
}
比如在写一个交换函数的的时候,参数为两个int类型数据,那这个交换函数只能局限在int的数据类型吧,float呢?double呢?这时候就需要写很多相同的代码,很无聊并且多余,这个时候我们就能使用我们今天的主角template来简化我们的写法了,改进之后
//声明时这样
template<typename T> void Swap(T *a, T *b){T temp = *a;*a = *b;*b = temp;
}//调用时这样
int a=10,b=20;
swap(&a,&b);
在这里的声明是隐式声明,后面会有讲到显式声明
inline函数模板
如果你想把你的函数声明为inline提高效率,那么参考下面
inline关键字放在template之后,函数类型之前
//正确写法
template<typename T>inline T swap(const T*a,const T*b)//错误写法
inline template<typename T>T swap(const T*a,const T*b)
类模板
//类模板声明
template<class Type>class Queue{
public:Queue();Type &front();const Type &front()const;void push(const Type &);void pop();bool empty()const
private:...
};
和咱的函数模板不同啊,我们的类模板需要加个括号(显式)告诉编译器老子是啥类型。
//类模板定义
queue<int>qi;//什么是显式,在定义时加个括号告诉他老子是int就是显式
Queue<vector<double>>qc;
Queue<sting>qs;
函数模板特化
有些时候,我们编写的模板定义并不总是适用于所有类型
template<typename T>
int compare(const T&v1,const T&v2)
{if(v1<v2)return -1;if(v1>v2)return 1;return 0;
}
当这个函数的参数类型是C风格字符串时,这个函数不能正常工作(这个函数将比较两个指针在内存中的相对位置,但没有比较指针指向对象的大小),这时候我们必须提供一个针对C风格字符串的特殊定义,这就是模板特化
函数模板的特化
特化的形式如下:
- 关键字tempalte后面接一对空的尖括号(< >)
- 函数名后接模板名和一对尖括号,尖括号中指定这个特化定义的模板形参
- 函数形参表
- 函数体
template<>
int compare<const char *>(const char *const &v1,const char *const &v2)
{return strcmp(v1,v2);
}
与任意函数一样,函数模板特化可以声明而无须定义。
template<>
int compare<const char *>(const char *const &,const char *const &);
一定要区分函数重载和模板特化,如果在特化中省略空的模板形参表template<>,那么结果是函数的重载而不是模板特化
int compare(const char *const&,const char *const&);
//声明了该函数的重载版本而不是模板版本
在调用模板的这个特化版本之前,特化的声明必须在作用域中
template<class T>
int compare(const T&t1,const T& t2)
{...
}int main()
{int i=compare("hello","world");...
}template<>
int compare<const char *>(const char *const &s1,const char *const &s2)
{...
}
这个程序有错误,这个函数将会调用未特化的原模板函数
特化出现在对该模板实例的调用之后是错误的
简单的总结:函数模板就是一个通用的函数入口,处理大部分类型的数据,模板特化就是为了处理少数的函数模板里的规则不能处理的数据类型.
相关文章:
2023-2-19-What is ‘ template<typename E, E V> ‘?
目录C里面template怎么用inline函数模板类模板函数模板特化C里面template怎么用 template是什么? template其实是C的一种语法糖,本意是去简化程序员的工作. void swap(int *a,int *b){int temp *a;*a *b;*b temp; }比如在写一个交换函数的的时候,参数为两个in…...
华为OD机试题 - 字符串加密(JavaScript)
最近更新的博客 华为OD机试题 - 任务总执行时长(JavaScript) 华为OD机试题 - 开放日活动(JavaScript) 华为OD机试 - 最近的点 | 备考思路,刷题要点,答疑 【新解法】 华为OD机试题 - 最小步骤数(JavaScript) 华为OD机试题 - 任务混部(JavaScript) 华为OD机试题 - N 进…...
美团前端一面手写面试题
实现斐波那契数列 // 递归 function fn (n){if(n0) return 0if(n1) return 1return fn(n-2)fn(n-1) } // 优化 function fibonacci2(n) {const arr [1, 1, 2];const arrLen arr.length;if (n < arrLen) {return arr[n];}for (let i arrLen; i < n; i) {arr.push(arr[…...
2D图像处理:缺陷检测--仿照Halcon的Variation Model
文章目录 基于 C++&Opencv 的检测结果(Robust模式-MAD)一、Variation Model1.1 准备和训练模型方法1.2 比较模板方法1.3 过滤(保留符合缺陷特征的区域)二、参考基于 C++&Opencv 的检测结果(Robust模式-MAD) 一、Variation Model Halcon中的Variation Model主要是将待…...
JavaScript 注释
JavaScript 注释可用于提高代码的可读性。JavaScript 注释JavaScript 不会执行注释。我们可以添加注释来对 JavaScript 进行解释,或者提高代码的可读性。单行注释以 // 开头。本例用单行注释来解释代码:实例// 输出标题:document.getElementB…...
浅谈使用CDN加速的OSS
目录引出OSS对象存储服务CDNCDN加速OSS资源总结引出 之前,我在写项目的时候,因为项目中存在音视频的存储,然后我看圈子里面的人都是使用OSS对象存储来处理,然后我也跟风去使用了,然后在之后,我一个朋友问我…...
华为OD机试题 - 服务依赖(JavaScript)
最近更新的博客 华为OD机试题 - 任务总执行时长(JavaScript) 华为OD机试题 - 开放日活动(JavaScript) 华为OD机试 - 最近的点 | 备考思路,刷题要点,答疑 【新解法】 华为OD机试题 - 最小步骤数(JavaScript) 华为OD机试题 - 任务混部(JavaScript) 华为OD机试题 - N 进…...
整合K8s+SpringCloudK8s+SpringBoot+gRpc
本文使用K8s当做服务注册与发现、配置管理,使用gRpc用做服务间的远程通讯一、先准备K8s我在本地有个K8s单机二、准备service-providerpom<?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.…...
Django框架之模型视图--HttpResponse对象
HttpResponse对象 视图在接收请求并处理后,必须返回HttpResponse对象或子对象。HttpRequest对象由Django创建,HttpResponse对象由开发人员创建。 1 HttpResponse 可以使用django.http.HttpResponse来构造响应对象。 HttpResponse(content响应体, con…...
Linux下的Jenkins安装教程
当前环境 CentOS 7.8Java 11(注意当前jenkins支持的Java版本最低为Java11)FinalShell 3.9(操作环境) 安装Jenkins PS:不建议使用Docker安装Jenkins,因为使用Jenkins的时候一般会调用外部程序,…...
[软件工程导论(第六版)]第5章 总体设计(课后习题详解)
文章目录1. 为每种类型的模块耦合举一个具体例子。2. 为每种类型的模块内聚举一个具体例子。3. 用面向数据流的方法设计下列系统的软件结构。4. 美国某大学共有200名教师,校方与教师工会刚刚签订一项协议。按照协议,所有年工资超过$26000(含$…...
力扣62.不同路径
文章目录力扣62.不同路径题目描述方法1:暴力深搜(超时未通过)方法2:动态规划力扣62.不同路径 题目描述 一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为 “Start” )。 机器人每次只能向下或者向右移动一步。机器…...
【验证码的识别】—— 图形验证码的识别
前言 (结尾有彩蛋欧) 目前,许多网站采取各种各样的措施来反爬虫,其中一个措施便是使用验证码。随着技术的发展,验证码的花样越来越多。验证码最初是几个数字组合的简单的图形验证码,后来加入了英文字母和混…...
RocketMQ云服务器和本地基础安装搭建及可视化控制台安装使用
一起学编程,让生活更随和! 如果你觉得是个同道中人,欢迎关注博主gzh:【随和的皮蛋桑】。 专注于Java基础、进阶、面试以及计算机基础知识分享🐳。偶尔认知思考、日常水文🐌。 目录一、RocketMQ 介绍1、Ro…...
JavaScript:简单理解防抖和节流,如何定义防抖和节流函数?
防抖 防抖函数,就是防止抖动,避免事件重复触发。比如监听输入框的输入,不应该在用户每输入一个字符就触发监听,而是在用户输入结束后再来监听。 流程为: 1、事件触发; 2、开启定时器; 3、当事…...
【opencv 系列】第3章 图像的8种变换
文章目录前言上代码1.1 复习读取和显示1.2 图像放大、缩小 cv2.resize()1.3 图像平移1.4 图像旋转1.5 图像仿射变换1.6 图像的裁剪1.7 位运算(AND, OR, XOR)1.8 图像的分离和融合1.9 颜色空间 color space前言 坦白说,这一章我认为是整个opencv系列最难的一张&…...
【C语言刷题】倒置字符串
解题思路与过程📽️解题思路📽️解题过程🔧1.输入🔧2.设计逆序函数🔧3.逆序整个字符串🔧4.逆序每个单词📽️源码📷先来看题👇📽️解题思路 🔴 首先…...
用switch语句编程设计一个简单的计算器程序,要求根据用户从键盘输入的表达式:
用switch语句编程设计一个简单的计算器程序,要求根据用户从键盘输入的表达式:操作数1 运算符op 操作数2计算表达式的值,指定的算术运算符为加()、减(-)、乘(*)、除&#…...
uboot编译分析
uboot编译分析 V 1 –> Q ,在一行命令前面加上表示不会在终端输出命令 KCONFIG_CONFIG ? .config.config 默认是没有的,默认是需要使用命令“make xxx_defconofig”先对uboot进行配置,配置完成就会在uboot根目录下生成.config。如果后续自行调整…...
SpringCloud Alibaba集成Dubbo实现远程服务间调用
SpringCloud Alibaba集成Dubbo实现远程服务间调用 工程创建 一、创建springBoot分模块项目,父工程:springcloud-alibaba以及子模块product-dubbo-provider、order-dubbo-consumer等 项目基本结构图如下所示: 二、依赖引入 在以上两个子模块…...
别再死记硬背SPI时序了!用STM32CubeMX+W25Q128实战,5分钟搞懂CPOL/CPHA模式选择
从波形到代码:STM32CubeMX可视化解析SPI四种模式的实战指南 当第一次接触SPI通信时,那四种工作模式(CPOL/CPHA组合)就像天书一样令人困惑。传统教程往往要求死记硬背时序图,但今天我们将通过STM32CubeMX和W25Q128 Flas…...
基于大语言模型的强化学习奖励函数自动生成:text2reward项目实践指南
1. 项目概述:从文本指令到强化学习奖励的桥梁最近在折腾强化学习项目时,一个老问题又冒出来了:怎么设计一个既精确又高效的奖励函数?传统方法要么是工程师凭经验手写一堆规则,复杂场景下容易顾此失彼;要么依…...
心智网络与图神经网络:从Awesome清单到脑科学AI实战
1. 项目概述:当“心智网络”遇见“Awesome”清单如果你对认知科学、人工智能的交叉领域感兴趣,或者正在寻找一个能帮你快速切入“心智网络”研究的导航图,那么你很可能已经听说过或正在寻找mind-network/Awesome-Mind-Network这个项目。简单来…...
个人股票数据中枢构建指南:从多源聚合到Python量化分析
1. 项目概述:一个为个人投资者打造的股票数据中枢如果你和我一样,是个喜欢自己动手折腾、对市场数据有“洁癖”的个人投资者,那你肯定也经历过这样的烦恼:想分析一只股票,数据源五花八门,格式千奇百怪&…...
如何一键修复Windows系统依赖问题:VisualCppRedist AIO终极解决方案指南
如何一键修复Windows系统依赖问题:VisualCppRedist AIO终极解决方案指南 【免费下载链接】vcredist AIO Repack for latest Microsoft Visual C Redistributable Runtimes 项目地址: https://gitcode.com/gh_mirrors/vc/vcredist 你是否曾经遇到过打开游戏或…...
Cesium动态扩散圆与圆环效果实现:CallbackProperty与ImageMaterialProperty实战
1. Cesium动态扩散圆与圆环效果概述 动态扩散圆和圆环效果是Cesium中常见的数据可视化手段,广泛应用于地图标注、区域预警等场景。这种效果通过动态改变几何属性和材质纹理,创造出脉冲式的视觉反馈,能够有效吸引用户注意力。 核心实现原理&am…...
3DMax对齐功能全解析:从基础操作到高阶建模实战
1. 3DMax对齐功能基础入门 刚接触3D建模的新手最常遇到的困扰就是:为什么我的模型总是对不齐?记得我第一次用3DMax做建筑模型时,花了两小时都没能把一扇窗户准确地装到墙面上。直到后来掌握了对齐工具,才发现原来这种问题5秒钟就能…...
归档日志较多导致磁盘使用率100%,数据库停止服务
文章目录环境症状问题原因解决方案环境 系统平台:银河麒麟 (鲲鹏) 版本:9.0 症状 数据库服务停止,对外停止响应。 问题原因 服务器磁盘使用率100%,数据库服务因此停止。 解决方案 1、检查服务器磁盘…...
UltraScale架构FPGA功耗优化技术与工程实践
1. UltraScale架构的功耗优化技术全景解析在当今高性能计算和通信领域,功耗已成为FPGA选型的决定性因素之一。Xilinx UltraScale架构通过多层次的创新,在20nm工艺节点上实现了显著的功耗降低。作为深耕FPGA设计十余年的工程师,我将从实际应用…...
本地包管理器指南:实现开发环境隔离与依赖管理的工程实践
1. 项目概述:一个为开发者而生的本地包管理器指南如果你是一名开发者,尤其是经常在本地环境折腾各种工具、依赖和项目配置的开发者,那么“包管理器”这个词对你来说一定不陌生。无论是 Node.js 的 npm/yarn/pnpm,Python 的 pip/co…...
