[C++]——学习模板

深入解析摄像头硬件接口:DVP、MIPI-CSI2与USB的技术对比与应用场景 本文深入解析了摄像头三大主流硬件接口DVP、MIPI-CSI2与USB的核心技术差异。DVP接口作为并行传输的“老兵”,成本低但带宽和抗干扰能力有限;MIPI-CSI2凭借差分串行设计成为移动高清设备的首选,具备高带宽和强抗干扰性;USB接口则依托UVC标准实现了跨平台的即插即用。文章通过对比传输方式、带宽、应用场景等关键维度,为智能硬件、嵌入式系统等领域的工程师提供了清晰的选择指南。 阅读详情

前言:

什么是模板?模板可以做什么?带着好奇的心态去学习模板一定会有很大的收获。

一、模板

1.1 什么是模板

模板是 C++支持参数化多态的工具,使用模板可以使用户为类或者函数声明一种一般模式,使得类中的某些数据成员或者成员函数的参数、返回值取得任意类型。

1.2 模板的概念

模板(Template)指 C++ 程序设计设计语言中采用类型作为参数的程序设计,支持通用程序设计。C++的标准库提供许多有用的函数大多结合了模板的观念,如 STL 以及 iostream。

模板是一种对类型进行参数化的工具。
通常有两种形式:函数模板和类模板:

  • 函数模板:针对仅参数类型不同的函数;
  • 类模板:针对仅成员变量和成员函数类型不同的类。

在模版中,编译器一般不会进行类型转换操作,因为一但转化出问题,编译器就要背黑锅。

1.3 模板可以做什么

使用模板的目的就是能够让程序员编写与类型无关的代码.

1.4 泛型模板

泛型编程:编写与类型无关的通用代码,是代码复用的一种手段。模板是泛型编程的基础。

二、函数模板

函数模板编译(两次):
1:没有实例化之前,检查代码本身是否有语法错误。
2: 实例化期间,检查对模板代码的调用是否合法。

2.1 函数模板概念和格式

概念:

函数模板代表了一个函数家族,该函数模板与类型无关,在使用时被参数化,根据实参类型产生函数的特定类型版本。

格式:

template<typename T1, typename T2,…,typename Tn>
返回值类型 函数名 ( 参数列表 ){}

案例如下:

template<typename T>
void Swap(T& a, T& b)
{
    T temp = a;
    a = b;
    b = temp;
}

注意: typename 是用来定义模板参数的关键字 ,也可以使用 class( 切记:不能使用 struct 代替
class)

2.2 函数模板原理

函数模板是一个蓝图,它本身并不是函数,是编译器用使用方式产生特定具体类型函数的模具。
所以其实模板就是将本来应该我们做的重复的事情交给了编译器。

网图:
在这里插入图片描述

在编译器编译阶段 ,对于模板函数的使用, 编译器需要根据传入的实参类型来推演生成对应类型 的函数 以供调用。比如: 当用 double 类型使用函数模板时,编译器通过对实参类型的推演,将 T 确定为 double 类型,然后产生一份专门处理 double 类型的代码 ,对于字符类型也是如此。

2.3 函数模板实例化

用不同类型的参数使用函数模板时 ,称为函数模板的实例化 。模板参数实例化分为: 隐式实例化和显式实例化

2.3.1 隐式实例化

隐式实例化:也叫推演实例化,函数参数传递,推出模板参数的类型,生成对应的函数。(让编译器根据实参推演模板参数的实际类型)

2.3.2 显式实例化

显式实例化:在函数名后的 <> 中指定模板参数的实际类型

2.4 模板参数的匹配原则

1.一个非模板函数可以和一个同名的函数模板同时存在,而且该函数模板还可以被实例化为这个非模板函数
2.对于非模板函数和同名函数模板,如果其他条件都相同,在调动时会优先调用非模板函数而 不会从该模板产生出一个实例。如果模板可以产生一个具有更好匹配的函数,那么将选择模板。(简单来说就是有现成的就用现成得,有更合适得就用更合适得,没有就将就用模板)
3.模板函数不允许自动类型转换,但普通函数可以进行自动类型转换

2.5 函数模板声明定义分离

可以声明定义分离
不同的是模板参数声明定义都要给

//声明
template<typename T>
void Swap(T& left, T& right);
//定义
template<typename T>
void Swap(T& left, T& right)
{
    T temp = left;
    left = right;
    right = temp;
}

三、类模板

3.1 类模板的定义格式

//可以声明多个模板参数
template<class T1, class T2, ..., class Tn>
class 类模板名
{
    // 类内成员定义
};

3.2 类模板实例化

类模板实例化与函数模板实例化不同,类模板都是显式实例化,类模板实例化需要在类模板名字后跟 <>,然后将实例化的类型放在 <> 中即可,类模板名字不是真正的类,而实例化的结果才是真正的类。

  • 对于普通类,类名就是类型
  • 对于类模板,类名不是类型,类名<类型>才是整个类的类型

3.3 类模板声明和定义分离

// 类模板
// 注意:Stack不是具体的类,是编译器根据被实例化的类型生成具体类的模具
template<class T>
class Stack
{
private:
	T* _a;
	size_t _top;
	size_t _capacity;

public:
	// ...
	Stack(size_t capacity = 10)
		:_a(new T[capacity])
		,_top(0)
		,_capacity(capacity)
	{}

	~Stack(); // 析构函数,在类中声明,类外定义
};

// 注意:类模板中函数放在类外进行定义时,需要加模板参数列表
template<class T>
Stack<T>::~Stack()
{
	if (_a)
	{
		delete[] _a;
		_a = nullptr;
	}
	_top = _capacity = 0;
}

int main()
{
	// 类模板的使用都是显式实例化
    // Stack是类名,Stack<int>才是类型
	Stack<int*> st1;
	Stack<int> st2;

	return 0;
}

注意: 模板不支持把声明写到 .h 头文件,定义写到 .cpp 源文件的这种声明与定义分离在不同文件中的方式,会出现链接错误。

四、总结

注意: 一个模板,如果没有实例化,编译器是不会去检查它内部的语法的。

优点:

  1. 模板复用了代码,节省资源,更快的迭代开发, C++ 的标准模板库 (STL) 因此而产生
  2. 增强了代码的灵活性

缺点:

  1. 模板会导致代码膨胀问题,也会导致编译时间变长
  2. 出现模板编译错误时,错误信息非常凌乱,不易定位错误
手把手教你学simulink实例--基于Simulink的电动汽车动力总成控制策略验证与标定仿真平台 电动汽车的动力总成(Powertrain)是车辆的核心系统,包括动力电池、电机控制器、逆变器和驱动电机等关键部件。动力总成的控制策略直接影响车辆的动力性能、能耗效率和驾驶体验。为了验证和优化这些控制策略,基于MATLAB/Simulink的仿真平台成为一种高效且经济的解决方案。本项目旨在构建一个完整的基于Simulink的电动汽车动力总成控制策略验证与标定仿真平台,涵盖控制策略建模、性能评估以及参数标定等功能模块,并通过仿真验证系统的有效性。 阅读详情

相关推荐

AnolisOS网卡驱动源码编译与安装实战指南

本文提供了一份详尽的AnolisOS网卡驱动源码编译与安装实战指南。针对系统自带通用驱动不兼容导致网络无法使用的问题,文章从环境准备、源码获取、编译安装到新旧驱动替换与持久化配置,一步步解析了如何通过源码编译安装官方驱动,解决硬件兼容性问题,并确保驱动在系统重启后自动生效。

weixin_28358083的博客 304

c++模板学习笔记

建立一个通用函数,其返回值类型和形参类型可以不具体绑定,用一个来代表。

jhxjxjs的博客 1518

AIDD-人工智能药物设计-构建基于机器学习方法的在线预测平台高准确预测药物诱导骨毒性

在此基础上,提取多种药物分子特征,包括分子指纹(如MACCS、Morgan、RDKit、TopologicalTorsion、AtomPairs与Descriptors)及分子图谱,通过Transformer编码器与神经网络进行机器学习模型训练。最后,将训练好的模型部署为在线Web服务器(BoneToxPD),供用户快速预测药物的骨毒性。本研究不仅在骨毒性预测的准确性方面取得了突破,还在模型解释性方面提供了新的视角,通过注意力机制精准识别出影响骨毒性的关键化学基团,推动药物研发领域更安全、更高效的发展。

itwangyang520的博客 1078

Cpp学习——模板

模板简介

qq_41934502的博客 493

HBuilderx连接微信开发者工具

系列文章目录 文章目录系列文章目录前言一、环境1.HBuilerx 工具2.微信开发者工具二、关联微信开发者工具1.HBuilderx新建项目2.关联微信开发者工具3.运行微信小程序出现异常解决方法3.最终效果总结 前言 使用HBuilderx工具关联微信开发者工具,进行小程序开发 提示:以下是本篇文章正文内容,下面案例可供参考 一、环境 1.HBuilerx 工具 HBuilderx 2.微信开发者工具 微信开发者工具 二、关联微信开发者工具 1.HBuilderx新建项目 2.关联微信开发者工具

拥有必珍惜 3074

液冷方式介绍

如果将直径在1~100nm的颗粒悬置在传热流体(例如:水、乙烯、乙二醇等)中时,其传热能力会得到提升,因为大多数固体材料的热导率要大于液体,因此由颗粒、流体组成的混合物热导率也高于液体本身的热导率,由此制成的流体,我们称之为纳米流体。金属冷管的液体工质蒸散量几乎为0,而柔软材质的管道则会产生液体的蒸散,在封闭式循环系统中,为了弥补液体工质的蒸散,必须定期在系统中补充液体工质。——我们之前说过,材料的导电和导热的机制大致是类似的,所以导电能力更强的金属往往具有更好的导热能力。

制冷技术咨询与服务的博客 2030

C++模板与模板元编程学习资源

C++模板与模板元编程学习资源 去发现同类优质开源项目:https://gitcode.com/ 本仓库提供了《C++模板》和《C++模板元编程》两本书的下载资源。这两本书是学习C++模板编程的绝佳资料,适合中高级难度的学习者。 资源描述 《C++模板》:本书详细介绍了C++模板的基础知识和高级用法,帮助读者深入理解模板的工作原理和应用场景。 《C++模板元编程》:在掌握C++模板的基础上...

gitblog_09800的博客 333

嵌入式开发必看:STM32 DMA双缓冲配置全攻略(含CubeMX教程)

本文详细解析了STM32 DMA双缓冲机制的原理与优势,并提供了基于CubeMX的完整配置教程。通过硬件自动切换两个缓冲区,实现DMA传输与CPU处理的真正并行,有效降低中断频率,提升高速数据采集、音频流处理等场景下的系统效率和实时性。

weixin_29212429的博客 173

C++模板初阶学习

C++模板初阶学习 文章目录C++模板初阶学习前言一、泛型编程二、函数模板1.函数模板的概念2.函数模板格式3.函数模板的原理4.函数模板的实例化隐式实例化:让编译器根据实参推演模板参数的实际类型显式实例化:在函数名后的 <> 中指定模板参数的实际类型5.模板参数的匹配原则三、类模板1.类模板的定义格式2.类模板的实例化总结 前言 今天学习的知识,在咱们以后的编程工作中,可以大大提高咱们的代码效率,也是泛型编程的基础,属于是重点之一。(在我这里啥都是重点-。-) 一、泛型编程 我们都知道,函

stromSLR的博客 306

【Tiny_CD】Tiny_CD变化检测网络详解(含python代码)

tiny-cd网络详解,含论文下载、代码下载地址。

向上生长的程序媛的博客 2161

2026华为OD机试(C语言)真题【E卷+A卷+B卷+C卷+D卷】目录+在线OJ

华为OD机试真题题库【E卷+A卷+B卷+C卷+D卷】目录,C语言实现。

MISAYAONE的博客 11万+

如何学习cpp模板

学习 C++ 模板的方法如下: 了解模板的基本概念:模板是一种用于创建可重用代码的 C++ 特性。它允许您使用占位符来代表类型或其他值,然后在稍后使用具体类型或值来创建函数或类的具体实例。 学习如何创建和使用函数模板:函数模板是一种可以使用占位符表示类型的函数,可以接受不同类型的参数并返回不同类型的结果。 学习如何创建和使用类模板:类模板是一种使用占位符表示类型的类,可以创建不同类型的对象。...

weixin_35755562的博客 104

华为OD机考双机位C卷 - 文件存储系统的排序(Java & Python & JS & GO & C++ & C)

华为OD机考双机位C卷 - 文件存储系统的排序, 提供Java、C++、Python、Go、JavaScript源码实现,并提供完整思路讲解,以及在线OJ模拟做题。

算法大师! 777

CPP学习之初识模板

返回值类型 函数名(参数列表){}

weixin_39559852的博客 423

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

深入学习cpp初阶模板

摘要 本文介绍了C++模板的基本概念和使用方法。模板是一种泛型编程工具,包括函数模板和类模板,可以编写与数据类型无关的代码。函数模板通过template关键字定义,支持隐式类型推导和显式实例化两种调用方式。类模板同样使用template定义,但需要注意函数声明与定义分离时的模板参数处理。当模板函数与普通函数同名时,编译器会优先调用普通函数。模板技术能有效减少代码重复,提高编程效率。

nndmw7474的博客 676

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

c++模板学习

很好的学习网站: http://www.runoob.com/cplusplus/cpp-templates.html   1.模板格式: template &lt;class type&gt; ret-type func-name(parameter list) { // 函数的主体 } 2.定义一个普通模板: template &lt;typename T&gt; 3.定义一个类...

u010029439的博客 216

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

学习笔记—C++—模板初阶

使用函数重载虽然可以实现,但是有一下几个不好的地方:1. 重载的函数仅仅是类型不同,代码复用率比较低,只要有新类型出现时,就需要用户自己增加对应的函数。2. 代码的可维护性比较低,一个出错可能所有的重载均出错。如果在C++中,也能够存在这样一个,通过给这个模具中,来,那将会节省许多头发。巧的是前人早已将树栽好,我们只需在此乘凉。

2401_83231468的博客 1084

C++ 模板编程学习路线

学习5。

yizhiniu_xuyw的专栏 353

C++底层学习预备:模板初阶

进入STL库学习之前我们要先了解有关模板的学习,以便在学习完STL库使用之后,能更深入的了解其底层工作原理

Zero_VPN的博客 3257

【C++基础篇】学习C++就看这篇--->泛型编程之模板

C++模板是编写与类型无关的通用代码的泛型编程手段。函数模板能为不同数据类型生成函数实例,通过 template<typename T> 或 template<class T> 声明,使用时编译器按需实例化。类模板用于定义通用类,如模板类实现不同数据类型的栈结构,实例化时需指定类型。

熬夜秃顶中...... 1565

C++学习笔记(八)——模板

写本系列的目的(自用)是回顾已经学过的知识、记录新学习的知识或是记录心得理解,方便自己以后快速复习,减少遗忘。以前三天打鱼两天晒网地学习C++,一直无法对C++熟练掌握,核心的面向对象编程并不熟悉,STL语法只会部分,因此也希望自己未来能做到熟悉甚至精通C++。

qq_65078669的博客 1098

CPP学习备忘[12] 模板

【1】模板使程序员能够快速建立具有类型安全的类库集合和函数集合,以方便更大规模的软件开发。C++的STL全赖于模板实现,模板是C++面向对象程序设计的重要补充。   【2】函数模板的定义形式为:     template     返回类型 函数模板名(数据参数表)     {         函数模板定义体;     }   【3】函数模板不是函数,它是以具体的类型为实参来生成函

我的读书笔记(2011-2013) 480

经验分享:适合 C++ 学习的开源项目(基础到进阶实战)

俗话说:万事开头难,学习编程也是一样。

致力于C语言C++知识分享! 3837

适合 C++ 新手学习的开源项目——在 GitHub 学编程

HelloGitHub 想让更多人爱上编程、开源,所以一直在尝试、摸索如何可以帮助到更多的人。我想试试 HelloGitHub 能不能组建一个大学生开源俱乐部你们的编程路才刚开始 HG 想陪你们走一段。​如果你是在校大学生或研究生热爱编程、开源,喜欢讨论和学习技术相关的内容,但是周围没有和你乐趣相投的小伙伴?那么来 HelloGitHub 的大学生开源俱乐部吧!加​微信号:HelloGitHub (​备注:学校和专业)

男神的专栏 2416

C++之模板/模板的学习/学习模板

C++之模板/模板学习/学习模板 模板就是建立通用的模具,大大提高复用性 函数模板 C++提供两种模板机制 函数模板和类模板 函数模板语法 函数模板作用: 建立一个通用函数,其函数返回值类型和形参类型可以不具体制定,用一个虚拟的类型来代表 语法: template<typename T> 函数声明或定义 解释: template—声明创建模板 typename — 表明其后面的符号是一种数据类型,可以用class代替 T-- 通用的数据类型,名称可以替换,通常为大写字母 #include &l

qq_36711295的博客 116

C++模板 学习要点

 C++模板学习要点1. 类模板   a.  方法模板       主要用于实现拷贝构造函数和赋值运算符   b. 选择性实例化   c. 类模板特化         实际上是编写模板类的例外情况, 如TClass, 定义了一个模板类, 但是这个当T是char*时, 该模板类的定义的行为可能没有意义, 这时候需要针对当T是char*时的情况编写特化类模板。特化的目的是为用户提供统一的名字。 当用户

神奇的木头 490
上一篇: [C/C++]——内存管理
下一篇: [C++]——STL简介
一个小脑袋
一个小脑袋 新星创作者: C/C++技术领域 新星创作者: C/C++技术领域
博客等级 码龄6年 4388粉丝 79原创
评论 19
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值