c++---------------------------模板进阶
1.非类型模板参数
namespace bite
{
// 定义一个模板类型的静态数组
template<class T, size_t N = 10>
class array
{
public:
T& operator[](size_t index){return _array[index];}
const T& operator[](size_t index)const{return _array[index];}
size_t size()const{return _size;}
bool empty()const{return 0 == _size;}
private:
T _array[N];
size_t _size;
};
}
注意:浮点数,类对象以及字符串是不可以 作为非类型模板参数的
2.模板的特化
2.1概念
模板可以实现一些与类型无关的代码,但是对一些特殊的可能回的得到错误的结构需要特殊处理
template<class T>
bool Less(T left, T right)
{
return left < right;
}
int main()
{
cout << Less(1, 2) << endl; // 可以比较,结果正确Date d1(2022, 7, 7);
Date d2(2022, 7, 8);
cout << Less(d1, d2) << endl; // 可以比较,结果正确
Date* p1 = &d1;
Date* p2 = &d2;
cout << Less(p1, p2) << endl; // 可以比较,结果错误
return 0;
}
2.2函数模板的特化
1.必须要有一个基础模板
2.关键字template后面接一对空的尖括号<>
3.函数形参表: 必须要和模板函数的基础参数类型完全相同,如果不同编译器可能会报一些奇
template<class T>
bool Less(T left, T right)
{
return left < right;
}
// 对Less函数模板进行特化
template<>
bool Less<Date*>(Date* left, Date* right)
{
return *left < *right;
}
int main()
{
cout << Less(1, 2) << endl;
Date d1(2022, 7, 7);
Date d2(2022, 7, 8);
cout << Less(d1, d2) << endl;
Date* p1 = &d1;
Date* p2 = &d2;
cout << Less(p1, p2) << endl; // 调用特化之后的版本,而不走模板生成了
return 0;
}
2.3模板的特化
1.全特化就是全部的参数都确定
lass Data
{
public:
Data() {cout<<"Data<T1, T2>" <<endl;}
private:
T1 _d1;
T2 _d2;
};
template<>
class Data<int, char>
{
public:
Data() {cout<<"Data<int, char>" <<endl;}
private:
int _d1;
char _d2;
};
void TestVector()
{
Data<int, int> d1;
Data<int, char> d2
2.偏特化和部分特化
偏特化:
template<class T1, class T2>
class Data
{
public:
Data() {cout<<"Data<T1, T2>" <<endl;}
private:
T1 _d1;
T2 _d2;
};部分特化:
template <class T1>
class Data<T1, int>
{
public:
Data() {cout<<"Data<T1, int>" <<endl;}
private:
T1 _d1;
int _d2;
};
相关文章:
c++---------------------------模板进阶
1.非类型模板参数 模板参数分类类型形参与非类型形参 。 类型形参即:出现在模板参数列表中,跟在 class 或者 typename 之类的参数类型名称 。 非类型形参,就是用一个常量作为类 ( 函数 ) 模板的一个参数,在类 ( 函数 ) 模板中可…...
FPGA与ASIC:深度解析与职业选择
IC(集成电路)行业涵盖广泛,涉及数字、模拟等不同研究方向,以及设计、制造、封测等不同产业环节。其中,FPGA(现场可编程门阵列)和ASIC(专用集成电路)是两种重要的芯片类型…...
c++面试题,请使用STL的std::remove_if算法删除std::vector<int>容器中大于5的数字
请使用STL的std::remove_if算法删除std::vector容器中大于5的数字 在C 中, std::remove_if 算法并不会真正从容器中删除元素, 而是将满足条件的元素移动到容器末尾,并返回一个指向新的逻辑结束位置的迭代器。 你需要使用容器的 erase 成员函…...
阿里云-银行核心系统转型之业务建模与技术建模
业务领域建模包括业务建模和技术建模,整体建模流程图如下: 业务建模包括业务流程建模和业务对象建模 业务流程建模:通过对业务流程现状分析,结合目标核心系统建设能力要求,参考行业建 模成果,形成结构化的…...
快速搭建深度学习环境(Linux:miniconda+pytorch+jupyter notebook)
本文基于服务器端环境展开,使用的虚拟终端为Xshell。 miniconda miniconda是Anaconda的轻量版,仅包含Conda和Python,如果只做深度学习,可使用miniconda。 [注]:Anaconda、Conda与Miniconda Conda:创建和管…...
智能风控 数据分析 groupby、apply、reset_index组合拳
目录 groupby——分组 本例 apply——对每个分组应用一个函数 等价用法 reset_index——重置索引 使用前编辑 注意事项 groupby必须配合聚合函数、 关于agglist 一些groupby试验 1. groupby对象之后。sum(一个列名) 2. groupby对象…...
Linux(Centos 7.6)命令详解:iconv
1.命令作用 将给定文件的编码从一种编码转换为另一种编码(Convert encoding of given files from one encoding to another) 2.命令语法 Usage: iconv [OPTION...] [FILE...] 3.参数详解 OPTION: 输入/输出格式规范: -f, --from-codeNAME,原始文本编码-t, --t…...
MySQL实现批量表分区完全示例
对于单表大数据量大的问题,如果数据支持分片,使用表分区是个不错的选择,那么MySQL是如何实现表分区的? 一、表分区条件 1.数据库存储引擎支持:InnoDB 和 MyISAM引擎 2.数据库版本支持:MySQL 5.1以后&…...
缓存商品、购物车(day07)
缓存菜品 问题说明 问题说明:用户端小程序展示的菜品数据都是通过查询数据库获得,如果用户端访问量比较大,数据库访问压力随之增大。 结果: 系统响应慢、用户体验差 实现思路 通过Redis来缓存菜品数据,减少数据库查询…...
开发环境搭建-1:配置 WSL (类 centos 的 oracle linux 官方镜像)
一些 Linux 基本概念 个人理解,并且为了便于理解,可能会存在一些问题,如果有根本上的错误希望大家及时指出 发行版 WSL 的系统是基于特定发行版的特定版本的 Linux 发行版 有固定组织维护的、开箱就能用的 Linux 发行版由固定的团队、社…...
QT 使用QSqlTableModel对数据库进行创建,插入,显示
文章目录 效果图概述功能点代码分析初始数据插入数据数据显示 总结 效果图 概述 本案例用于对数据库中的数据进行显示等其他操作,其他表格筛选,过滤等功能可看此博客 框架:数据模型使用QSqlTableModel,视图使用QTableView&#x…...
26、正则表达式
目录 一. 匹配字符 .:匹配除换行符外的任意单个字符。 二. 位置锚点 ^:匹配输入字符串的开始位置。 $:匹配输入字符串的结束位置。 \b:匹配单词边界。 \B:匹配非单词边界。 三. 重复限定符 *:匹配…...
vue 数据双向绑定无效 明明值修改了 页面却没有变化
在 Vue.js 中,数据双向绑定通常通过 v-model 指令来实现。如果你修改了数据但页面没有更新,可能是因为以下几个原因之一: 1. 检查 data 函数 确保你的数据属性是在 Vue 实例的 data 函数中声明的,并且是响应式的。例如ÿ…...
【深度学习】3.损失函数的作用
损失函数的作用 假设把猫这张图片分成四个像素点,分别为:56、231、24、2(实际应该是三维的,因为还有颜色通道的维度,这里简化成二维)。 像素点拿到以后,进行三分类,粉红色为第一组W…...
使用 Aryn DocPrep、DocParse 和 Elasticsearch 向量数据库实现高质量 RAG
作者:来自 Elastic Hemant Malik 及 Jonathan Fritz 组织依靠自然语言查询从非结构化数据中获取见解,但要获得高质量的答案,首先要进行有效的数据准备。Aryn DocParse 和 DocPrep通过将复杂文档转换为结构化 JSON 或 markdown 来简化此过程&a…...
Vue3初学之Element Plus Dialog对话框,Message组件,MessageBox组件
Dialog的使用: 控制弹窗的显示和隐藏 <template><div><el-button click"dialogVisible true">打开弹窗</el-button><el-dialogv-model"dialogVisible"title"提示"width"30%":before-close&qu…...
【面试】Java 记录一次面试过程 三年工作经验
2025 个人工作经验与基础概念 工作挑战及解决方式:这需要根据个人实际工作经历来回答,例如在项目中遇到性能瓶颈,通过代码优化、数据库索引调整或引入缓存机制等方式解决。单例模式: 常见的实现方式有饿汉式、懒汉式(…...
1/20赛后总结
1/20赛后总结 T1『讨论区管理员』的旅行 - BBC编程训练营 算法:IDA* 分数:0 damn it! Ac_code走丢了~~(主要是没有写出来)~~ T2华强买瓜 - BBC编程训练营 算法:双向DFS或者DFS剪枝 分数:0 Ac_code…...
Linux 高级路由与流量控制-用 tc qdisc 管理 Linux 网络带宽
大家读完记得觉得有帮助记得关注和点赞!!! 此分享内容比较专业,很多与硬件和通讯规则及队列,比较底层需要有技术功底人员深入解读。 Linux 的带宽管理能力 足以媲美许多高端、专用的带宽管理系统。 1 队列࿰…...
大模型GUI系列论文阅读 DAY1:《基于大型语言模型的图形用户界面智能体:综述》(6.6W 字长文)
摘要 图形用户界面(Graphical User Interfaces, GUIs)长期以来一直是人机交互的核心,为用户提供了直观且以视觉为驱动的方式来访问和操作数字系统。传统上,GUI交互的自动化依赖于基于脚本或规则的方法,这些方法在固定…...
【组件库】使用Vue2+AntV X6+ElementUI 实现拖拽配置自定义vue节点
先来看看实现效果: 【组件库】使用 AntV X6 ElementUI 实现拖拽配置自定义 Vue 节点 在现代前端开发中,流程图和可视化编辑器的需求日益增加。AntV X6 是一个强大的图形化框架,支持丰富的图形操作和自定义功能。结合 ElementUI,…...
考研408笔记之数据结构(三)——串
数据结构(三)——串 1. 串的定义和基本操作 本节内容很少,重点是串的模式匹配,所以对于串的定义和基本操作,我就简单提一些易错点。另外,串也是一种特殊的线性表,只不过线性表是可以存储任何东…...
Java 和 JavaScript 的区别
尽管名字相似,JavaScript 的名字中带有 “Java”,确实让很多人误以为它与 Java 有紧密联系。但实际上,它们是完全不同的语言,只是在 JavaScript 的发展历史中与 Java 有一定的关联。 1. JavaScript 的诞生背景 时间点࿱…...
Web3与传统互联网的对比:去中心化的未来路径
随着互联网技术的不断发展,Web3作为去中心化的新兴架构,正在逐步改变我们的网络体验。从传统的Web2到Web3,互联网的演进不仅是技术的革新,更是理念的变革。那么,Web3与传统互联网相比,到底有何不同…...
C++之初识模版
目录 1.关于模版的介绍 2.函数模版 2.1函数模板概念 2.2函数模板格式 2.3 函数模板的原理 2.4 函数模板的实例化 2.5模板参数的匹配原则 3.类模版 3.1类模板的定义格式 3.2 类模板的实例化 1.关于模版的介绍 C中的模板是一种通用编程工具,它允许程序员编…...
如何给自己的域名配置免费的HTTPS How to configure free HTTPS for your domain name
今天有小伙伴给我发私信,你的 https 到期啦 并且随手丢给我一个截图。 还真到期了。 javapub.net.cn 这个网站作为一个用爱发电的编程学习网站,用来存编程知识和面试题等,平时我都用业余时间来维护,并且还自费买了服务器和阿里云…...
什么是Memecoin?它如何在加密货币世界崭露头角
在加密货币的世界里,Memecoin已经成为一个越来越受欢迎的词汇。作为一种新兴的加密货币,Memecoin凭借其独特的性质和文化背景吸引了大量投资者和加密爱好者。本文将详细探讨Memecoin是什么、它的起源、以及为什么它在市场中越来越受到关注。 什么是Meme…...
[unity 高阶]使用ASE制作一个cubed的skybox的shader,跟做版本
第一步,导入ASE 此步骤不在此讲解,有时间再补充 第二步,创建shader 需要选择shader的类型,此处选择legacy/Unlit第三步,创建变量 根据默认shader中的变量 _Tint (“Tint Color”, Color) = (.5, .5, .5, .5)[Gamma] _Exposure (“Exposure”, Range(0, 8)) = 1.0_Rotat…...
Java复习第四天
一、代码题 1.相同的树 (1)题目 给你两棵二叉树的根节点p和q,编写一个函数来检验这两棵树是否相同。 如果两个树在结构上相同,并且节点具有相同的值,则认为它们是相同的。 示例 1: 输入:p[1,2,3],q[1,2,3] 输出:true示例 2: 输…...
mysql数据库启动出现Plugin ‘FEEDBACK‘ is disabled.问题解决记录
本人出现该问题的环境是xampp,异常关机,再次在xampp控制面板启动mysql出现该问题。出现问题折腾数据库之前,先备份数据,将mysql目录下的data拷贝到其他地方,这很重要。 然后开始折腾。 查资料,会发现很多…...
Spring 是如何解决循环依赖问题
Spring 框架通过 三级缓存 机制来解决循环依赖问题。循环依赖是指两个或多个 Bean 相互依赖,形成一个闭环,例如 Bean A 依赖 Bean B,而 Bean B 又依赖 Bean A。Spring 通过提前暴露未完全初始化的 Bean 来解决这个问题。 以下是 Spring 解决…...
【论文笔记】TranSplat:深度refine的camera-required可泛化稀疏方法
深度信息在场景重建中是非常重要的先验,有一个精确的深度估计,重建质量起码提升一半,这一篇就是围绕着transformer优化深度来展开工作,进而提升GS的效果,感谢作者大佬们的work! 1 Abstract 与之前的3D重建方…...
营销2.0时代的挑战与开源AI智能名片2+1链动模式S2B2C商城小程序源码的解决方案
摘要:本文旨在探讨营销2.0时代企业在客户管理方面的挑战,并提出开源AI智能名片21链动模式S2B2C商城小程序源码作为解决方案。营销2.0虽然强调客户导向,但在实际操作中,企业往往无差别地对待所有客户,导致客户忠诚度下降…...
PHP教育系统小程序
🌐 教育系统:全方位学习新体验,引领未来教育风尚 🚀 教育系统:创新平台,智慧启航 📱 教育系统,一款深度融合科技与教育的创新平台,匠心独运地采用先进的ThinkPHP框架与U…...
开篇:吴恩达《机器学习》课程及免费旁听方法
课程地址: Machine Learning | Coursera 共包含三个子课程 Supervised Machine Learning: Regression and Classification | Coursera Advanced Learning Algorithms | Coursera Unsupervised Learning, Recommenders, Reinforcement Learning | Coursera 免费…...
zookeeper的介绍和简单使用
1 zookerper介绍 zookeeper是一个开源的分布式协调服务,由Apache软件基金会提供,主要用于解决分布式应用中的数据管理、状态同步和集群协调等问题。通过提供一个高性能、高可用的协调服务,帮助构建可靠的分布式系统。 Zookeeper的特点和功能…...
python学opencv|读取图像(三十八 )阈值自适应处理
【1】引言 前序学习了5种阈值处理方法,包括(反)阈值处理、(反)零值处理和截断处理,相关文章链接为: python学opencv|读取图像(三十三)阈值处理-灰度图像-CSDN博客 python学opencv|读取图像(三十四&#…...
C++ 条件变量-生产消费者模型
条件变量是一种线程同步机制,当条件不满足时,相关线程被一直阻塞,直到某种条件出现,这些线程才会被唤醒. C11的条件变量提供了两个类: condition_variable:只支持与普通mutex搭配,效率更高。 condition_…...
Vue - ref( ) 和 reactive( ) 响应式数据的使用
一、ref( ) 在 Vue 3 中,ref() 是一个用于创建响应式引用的函数。它是 Vue 3 Composition API(组合式API) 的一部分,允许在组件中创建响应式数据。 使用对象:基本数据类型(String 、Number 、Boolean 、Null 等)、对…...
C语言初阶牛客网刷题——HJ73 计算日期到天数转换【难度:简单】
1. 题目描述——HJ73 计算日期到天数转换 牛客网OJ题链接 描述 每一年中都有 12 个月份。其中,1,3,5,7,8,10,12 月每个月有 31 天; 4,6,9,11 月每个月有 30 天;而对于 2 月,闰年时有29 天,平年时有 28 天。 现在&am…...
学到一些小知识关于Maven 与 logback 与 jpa 日志
1.jpa想要输出参数 logging:level:org.hibernate.orm.jdbc.bind: trace #打印SQL参数web: debug #web框架的日志级别就可以了, 2.Slf4j 其实 Slf4j 是一个日志接口规范,没有具体的实现 而 logback 是 Slf4j的一个实现 ,也是springboot3 的…...
Springboot3 自动装配流程与核心文件:imports文件
注:本文以spring-boot v3.4.1源码为基础,梳理spring-boot应用启动流程、分析自动装配的原理 如果对spring-boot2自动装配有兴趣,可以看看我另一篇文章: Springboot2 自动装配之spring-autoconfigure-metadata.properties和spring…...
1905电影网中国地区电影数据分析(一) - 数据采集、清洗与存储
文章目录 前言一、数据采集步骤及python库使用版本1. python库使用版本2. 数据采集步骤 二、数据采集网页分析1. 分析采集的字段和URL1.1 分析要爬取的数据字段1.2 分析每部电影的URL1.2 分析每页的URL 2. 字段元素标签定位 三、数据采集代码实现1. 爬取1905电影网分类信息2. 爬…...
postgresql15的启动
PostgreSQL是一个功能非常强大的、源代码开放的客户/服务器关系型数据库管理系统,且因为许可证的灵活,任何人都可以以任何目的免费使用、修改和分发PostgreSQL。现在国产数据库大力发展阶段,学习和熟悉postgresql的功能是非常有必要的&#x…...
基于SpringBoot的高校教师科研的设计与实现(源码+SQL脚本+LW+部署讲解等)
专注于大学生项目实战开发,讲解,毕业答疑辅导,欢迎高校老师/同行前辈交流合作✌。 技术范围:SpringBoot、Vue、SSM、HLMT、小程序、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容:…...
位运算的基本概念+通过 Brian Kernighan算法计算 lowbit 实现的奇技淫巧 python
目录 引入判断奇偶位运算概念 进入正题Brian Kernighan 算法lowbit 介绍判断幂举一反三牛刀小试汉明重量总结 引入 判断奇偶 假设你不知道位运算为何物:你怎么判断奇偶呢? n int(input()) if n % 2 0:print(f"{n}是偶数") else:print(f&q…...
vscode环境中用仓颉语言开发时调出覆盖率的方法
在vscode中仓颉语言想得到在idea中利用junit和jacoco的覆盖率,需要如下几个步骤: 1.在vscode中搭建仓颉语言开发环境; 2.在源代码中右键运行[cangjie]coverage. 思路1:编写了测试代码的情况(包管理工具) …...
【测试】UI自动化测试
长期更新,建议关注收藏点赞! 目录 概论WEB环境搭建Selenium APPAppium 概论 使用工具和代码执行用例。 什么样的项目需要自动化? 需要回归测试、自动化的功能模块需求变更不频繁、项目周期长(功能测试时长:UI自动化测…...
ThinkPHP 8的多对多关联
【图书介绍】《ThinkPHP 8高效构建Web应用》-CSDN博客 《2025新书 ThinkPHP 8高效构建Web应用 编程与应用开发丛书 夏磊 清华大学出版社教材书籍 9787302678236 ThinkPHP 8高效构建Web应用》【摘要 书评 试读】- 京东图书 使用VS Code开发ThinkPHP项目-CSDN博客 编程与应用开…...
利用 SoybeanAdmin 实现前后端分离的企业级管理系统
引言 随着前后端分离架构的普及,越来越多的企业级应用开始采用这种方式来开发。前后端分离不仅提升了开发效率,还让前端和后端开发可以并行进行,减少了相互之间的耦合度。SoybeanAdmin 是一款基于 Spring Boot 和 MyBatis-Plus 的后台管理系…...