c++模板的原理与使用

C++中实现代码复用有两个方式:类的继承(即实现了多态),以及模板的使用。这里介绍的模板的知识。

模板的目的:

同样的代码适用于不同类型下的使用,实现代码的复用目的。

模板的原理:

编译阶段,由编译器根据给如的模板类型确定具体该产生出什么类(当编译器编译到此处才产生出该具体的类),因此,模板的处理其实是编译阶段就完成了,相当于编译器编译阶段自动帮我们生成了大量的不同类型的类的代码,减少了我们的编码量,同时运行时候高效率。所以,c++强大,其实可以说是它的编译器牛逼!

模板的形式:

模板类,模板全局函数,模板类中的成员函数,注意,没有模板成员变量(如果想要成员变量也是模板的,那么就整个类弄成模板类,此时成员函数也可以模板化了)。

模板编写:

模板函数的定义(无论是全局函数还是一个类的成员函数),必须与声明在同一个文件中,不能声明在.h文件,定义写在.cpp文件,这是不可以的,因为编译器编译到该模板函数时候,它需要知道函数的内部实现,根据给入的类型来生成具体的函数,所以没有定义的话就会直接报错了(因为此时编译器是不会去别的文件寻找其定义的,还没到链接阶段呢,更不会寻找其它文件的信息)

template <class Return, class Class>

用class或者typename都可以,一样的作用

模板类定义:

使用的时候,总是需要我们带着Name<Xx, Xx>这样指定传入的类名,因为这样才是一个实际的类,而Name<Xx, Yy>,就跟前面这个类不是同一个类的

模板的特化

模板特化:就是在实例化模板时,对特定类型的实参进行特殊处理,即实例化一个特殊的实例版本。目的:对于一些特殊的类型,仍然能使得保持用户调用接口不变。C++模板(函数模板/类模板)_c++ 模板成员函数_DR5200的博客-CSDN博客

模板的使用例子:

这里,我用qt写了个线程管理的例子,封装了一个非常方便的线程类,就是用的模板方式,其中用到了模板类,模板成员函数,值得参考一下:qt自己实现方便的线程管理类_我是标同学的博客-CSDN博客

c++模板的使用,需要了解和注意的就是上面这些内容了,关于一些具体知识,可以参考如下博客:

C++——模板(超详细的模板解析)_c++模板___JAN__的博客-CSDN博客

qt使用模板template,报错无法解析外部符号_Y_Hanxiao的博客-CSDN博客

20200403 - 模板函数实现和声明必须在同一个头文件里_模板函数的声明与实现_baihebeijixing的博客-CSDN博客

C++类模板_小梁今天敲代码了吗的博客-CSDN博客

C++ 模板(Template)总结,长点小知识_函数_类型_int

C++类模板(模板类)详解

C++模板的使用_c++模板函数调用_sg-expert的博客-CSDN博客

C++函数模板_coal miner的博客-CSDN博客

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

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

相关文章

Cygwin 配置C/C++编译环境以及如何编译项目

文章目录 一、安装C、C编译环境需要的包1. 选择gcc-core、gcc-g2. 选择gdb3. 选择mingw64下的gcc-core、gcc-g4. 选择make5. 选择cmake6. 确认更改7. 查看包安装状态 二、C、C 项目编译示例step1&#xff1a;解压缩sed-4.9.tar.gzstep2&#xff1a;执行./configure生成Makefile…

shell之正则表达式及三剑客grep命令

一、正则表达式概述 什么是正则表达式&#xff1f; 正则表达式是一种描述字符串匹配规则的重要工具 1、正则表达式定义: 正则表达式&#xff0c;又称正规表达式、常规表达式 使用字符串描述、匹配一系列符合某个规则的字符串 正则表达式 普通字符&#xff1a; 大小写字母…

opencv视频截取每一帧并保存为图片python代码CV2实现练习

当涉及到视频处理时&#xff0c;Python中的OpenCV库提供了强大的功能&#xff0c;可以方便地从视频中截取每一帧并将其保存为图片。这是一个很有趣的练习&#xff0c;可以让你更深入地了解图像处理和多媒体操作。 使用OpenCV库&#xff0c;你可以轻松地读取视频文件&#xff0…

判断推理 -- 图形推理 -- 位置规律

一组图&#xff1a;从前往后找规律。 二组图&#xff1a;从第一组图找规律&#xff0c;第二组图应用规律。 九宫格&#xff1a; 90%横着看找规律&#xff0c;第一行找规律&#xff0c;第二行验证规律&#xff0c;第三行应用规律。 所有有元素组成都是线&#xff0c;三角形&…

面试热题(验证二叉搜索树)

给你一个二叉树的根节点 root &#xff0c;判断其是否是一个有效的二叉搜索树。 有效 二叉搜索树定义如下&#xff1a; 节点的左子树只包含 小于 当前节点的数。节点的右子树只包含 大于 当前节点的数。所有左子树和右子树自身必须也是二叉树 二叉树满足以上3个条件&#xff0c…

spark的使用

spark的使用 spark是一款分布式的计算框架&#xff0c;用于调度成百上千的服务器集群。 安装pyspark # os.environ[PYSPARK_PYTHON]解析器路径 pyspark_python配置解析器路径 import os os.environ[PYSPARK_PYTHON]"D:/dev/python/python3.11.4/python.exe"pip inst…

喜盈门、梦百合竞相入局,智能床垫起风了

配图来自Canva可画 现代人的生活压力普遍大&#xff0c;熬夜、失眠是常有的事&#xff0c;提高睡眠质量十分的重要。近些年来&#xff0c;市面上出现了许多辅助睡眠的产品&#xff0c;比如香薰、褪黑素、蒸汽眼罩、降噪耳塞、助眠枕、睡眠监测app等助眠神器。可以说为了睡个好…

【CLion + ROS2】在 clion 中编译调试 ros2 package

目录 0 背景1. 命令行编译 ros2 package2. 使用 clion 打开 ros2 工程3. 使用 clion 编译整个 ros2 工程3.1 使用 clion 的 external tool 配置 colcon build3.2 开始编译 dev_ws 工程3.3 编译结果&#xff1a; 4. 调试单独的 ros2 package4.1 创建 ros2 package 的独立的 colc…

【Git】版本控制器详解之git的概念和基本使用

版本控制器git 初始Gitgit的安装git的基本使用初始化本地仓库配置本地仓库三区协作添加---add修改文件--status|diff版本回退--reset撤销修改删除文件 初始Git 为了能够更⽅便我们管理不同版本的⽂件&#xff0c;便有了版本控制器。所谓的版本控制器&#xff0c;就是⼀个可以记…

yolo源码注释2——数据集配置文件

代码基于yolov5 v6.0 目录&#xff1a; yolo源码注释1——文件结构yolo源码注释2——数据集配置文件yolo源码注释3——模型配置文件yolo源码注释4——yolo-py 数据集配置文件一般放在 data 文件夹下的 XXX.yaml 文件中&#xff0c;格式如下&#xff1a; path: # 数据集存放路…

基于ssm+vue的新能源汽车在线租赁管理系统源码和论文PPT

基于ssmvue的新能源汽车在线租赁管理系统源码和论文PPT010 开发环境&#xff1a; 开发工具&#xff1a;idea 数据库mysql5.7(mysql5.7最佳) 数据库链接工具&#xff1a;navcat,小海豚等 开发技术&#xff1a;java ssm tomcat8.5 摘 要 随着科学技术的飞速发展&#xff0…

Ajax及前端工程化

Ajax&#xff1a;异步的js与xml。 作用&#xff1a; 1、通过ajax给服务器发送数据&#xff0c;并获得其响应的数据。 2、可以在不更新整个网页的情况下&#xff0c;与服务器交换数据并更新部分网页的技术。 一、同步与异步 二、原生Ajax 1、准备数据地址 2、创建XMLHttpReq…

SCSS的基本用法

1、声明变量 $ 声明变量的符号 $ 下面这张图左半部分是scss的语法&#xff0c;右半部分是编译后的css。&#xff08;整篇文章皆是如此&#xff09; 2、默认变量 !default sass 的默认变量仅需要在值后面加上 !default 即可。 如果分配给变量的值后面添加了 !default 标志…

Qt 杂项(Qwt、样式等)

Qt隐藏窗口边框 this->setWindowFlags(Qt::FramelessWindowHint);Qt模态框 this->setWindowModality(Qt::ApplicationModal);QLable隐藏border 代码中设置 lable->setStyleSheet("border:0px");或者UI中直接设置样式&#xff1a;“border:0px” Qwt开源…

JS实现树形结构、一维数组以及map之间的转换

const treeData[ {id:1, name:中国, children:[ {id:11,name:河南省,children:[{id:111,name:南阳市,children:[{id:1111,name:淅川县,children:null}]},{id:112,name:郑州市,children:[{id:1121,name:中牟县,children:null}]}] }, {id:22,name:广东省,children:[{id:221,name:…

c++中的多态

文章目录 1.多态的概念1.1概念 2.多态的定义及实现2.1多态的构成条件2.2虚函数2.3虚函数的重写2.4 C11 override 和 final2.5 重载、覆盖(重写)、隐藏(重定义)的对比 3. 抽象类3.1概念3.2接口继承和实现继承 4.多态的原理4.1虚函数表4.2多态原理分析4.3 动态绑定与静态绑定 5.单…

学习笔记整理-面向对象-03-构造函数

一、构造函数 1. 用new调用函数的四步走 new 函数();JS规定&#xff0c;使用new操作符调用函数会进行"四步走"&#xff1a; 函数体内会自动创建出一个空白对象函数的上下文(this)会指向这个对象函数体内的语句会执行函数会自动返回上下文对象&#xff0c;即使函数没…

HDMI接口的PCB布局布线要求

高清多媒体接口&#xff08;High Definition Multimedia Interface&#xff09;&#xff0c;简称&#xff1a;HDMI&#xff0c;是一种全数字化视频和声音发送接口&#xff0c;可以发送未压缩的音频及视频信号。随着技术的不断提升&#xff0c;HDMI的传输速率也不断的提升&#…

使用GEWE框架进行微信群组管理(三)

友情链接&#xff1a;GEWE框架官网 geweapi.com 点击访问即可。 邀请或添加联系人进群 小提示&#xff1a; 不管是添加40人以内还是以上都用此接口cause填写邀请进群的理由 请求URL&#xff1a; http://域名地址/api/group/invite 请求方式&#xff1a; POST 请求头&…