c++函数模板与类模板

RK3588平台-ES8388音频驱动调试与设备树配置实战 本文详细解析了在RK3588平台上调试ES8388音频驱动的实战过程。内容涵盖Linux音频驱动的三层架构(Machine、Platform、Codec),并重点提供了设备树(DTS)的完整配置示例,包括I2C节点、声卡节点及音频路由设置。文章还分享了驱动加载验证、amixer调试命令以及常见问题(如无声、变调)的排查思路,旨在帮助开发者快速完成RK3588与ES8388的音频系统集成。 阅读详情

模板是c++泛型编程的基础,它可以以独立于任何特定类型的方式去编写代码。

目录

一、函数模板

二、类模板


一、函数模板

先来看一个函数模板的定义和使用

template <typename T>
T const add(T const &a,T const &b)
{
	return a + b;
}

int main()
{
	cout << "add(5,6)=" << add(5, 6) << endl;	//输出11

	return 0;
}

声明模板的一般形式template<typename T> ,其中typename可以写完class,当然T也是可以改成其他名字的,这里只是一种习惯的写法。下面的代码和上面的写法实现是一致的。

template <class KO>
KO const add(KO const &a, KO const &b)
{
	return a + b;
}

int main()
{
	cout << "add(5,6)=" << add(5, 6) << endl;	//输出11

	return 0;
}

那么使用函数模板有什么好处呢?

在特定时刻,可以极大的减少我们的代码量,比如以下代码

double add(double a, double b)
{
	cout << "我是double普通方法" << endl;
	return a + b;
}

int add(int a, int b)
{
	cout << "我是int普通方法" << endl;
	return a + b;
}


//函数模板
template <typename T>
T const add(T const &a,T const &b)
{
	cout << "我是函数模板" << endl;
	return a + b;
}

int main()
{
	cout << "add(5,6)=" << add(5, 6) << endl;	//输出11
	cout << "add(5.1, 6.0)=" << add(5.1, 6.0) << endl;	//输出11.1

	return 0;
}

效果:

int add(int a, int b)这个函数,如果需要传入double,我们就需要重载add,再写一个double add(double a, double b)函数。

这样子做会增加代码量,而且也容易出错,不好维护。

这时候可以采用函数模板,只需要写

template <typename T>
T const add(T const &a,T const &b)

即可。

注意:当存在同名的普通函数和函数模板的时候,编译器会优先调用普通函数。所以上面输出的就是

我是double普通方法 以及 我是int普通方法。

二、类模板

简单写一下类模板的实现

在这里,我们定义了一个类模板,然后把对应的视图类存储进map中,方便后期维护。

//类模板
template <typename T>
class ChildView{
public:
	void pushItem(std::string name,T const& Item);
	void removeItem(std::string name);
	void showItems();
	bool isEmpty();
private:
	map<std::string,T> m_viewMap;
};

template<typename T>
void ChildView<T>::pushItem(std::string name, T const& Item)
{
	m_viewMap[name] = Item;
}

template<typename T>
void ChildView<T>::removeItem(std::string name)
{
	auto iter = m_viewMap.begin();
	iter = m_viewMap.find(name);
	if (iter != m_viewMap.end())
	{
		iter = m_viewMap.erase(iter);
	}
}

template<typename T>
void ChildView<T>::showItems()
{
	auto iter = m_viewMap.begin();
	for (; iter != m_viewMap.end(); iter++)
	{
		cout << iter->first.c_str() << "--";
		iter->second->showView();
	}
	cout << endl;
}

template<typename T>
bool ChildView<T>::isEmpty()
{
	if (!m_viewMap.empty())
		return false;
	return true;
}

class IView{
public:
	virtual void showView() = 0;
};

//下载界面
class DownloadView:public IView
{
public:
	void showView()
	{
		cout << "下载界面" << endl;
	}
	//...
};

//关于界面
class AboutView :public IView
{
public:
	void showView()
	{
		cout << "关于界面" << endl;
	}
	//...
};

int main()
{
	ChildView<IView*> view;
	IView* dv = new DownloadView;
	IView* av = new AboutView;
	view.pushItem("download", dv);
	view.pushItem("about", av);

	if (!view.isEmpty())	//如果不为空
	{
		view.showItems();
		cout << "-----------------" << endl;
		view.removeItem("about");
		view.showItems();
	}

	return 0;
}

效果:

【银河麒麟桌面系统】安装英伟达(NVIDIA)显卡驱动 本文详细介绍了在麒麟桌面操作系统V10 SP1(版本号2503)上安装NVIDIA RTX 5060显卡驱动的完整流程。主要内容包括:查看系统版本信息,从NVIDIA官网下载Linux 64位驱动,授予执行权限后运行安装程序,处理安装过程中的X server警告、32位库安装、DKMS模块选择等问题,以及安装完成后如何验证驱动状态。同时提供了卸载驱动的步骤和常见问题解决方案,如处理X server警告、libglvnd EGL依赖问题等。该指南适用于需要在国产麒麟系统上安装NVIDIA显卡驱动的用户,包含完 阅读详情

相关推荐

【迁移学习综述】

迁移学习的目标是将某个领域或任务上学习到的知识应用到不同的但相关的领域或问题中。迁移学习的研究来源于一个观测:人类可以将以前的学到的知识应用于解决新的问题,更快的解决问题或取得更好的效果。迁移学习被赋予这样一个任务:从以前的任务当中去学习知识(knowledge)或经验,并应用于新的任务当中。换句话说,迁移学习目的是从一个或多个源任务(source tasks)中抽取知识、经验,然后应用于一个目标领域(target domain)当中去。

afadgas的博客 4319

【C++】 函数模板和类模板

本文是我在学习C++过程当中的心得和学习笔记,在学习C++时已经有C语言的基础,因此入门知识省略了一部分。文章包含了C++的入门基础内容和核心进阶内容,并附上了学习的代码,仅供大家参考。如果有问题,有错误欢迎大家留言。剩余的内容可以通过这篇文章找到。

晚安的博客 1740

从零开始学习信号完整性(SIPI)--2

上一节我们已经谈过,信号完整性研究的是如何使驱动器输出的信号传输到接收器件并被正确的接收。 信号完整性的三要素包含了:信号、驱动接收芯片、传输通道。 这其中信号是主体,我们要做的主要工作就是设计好信号的传输路径为信号的正确传输扫清障碍。要做信号完整性分析与设计首先要了解信号的特性,以及信号质量的判别标准。 对一个信号进行描述通常需要如下几个指标: 信号特性的描述 摆幅:信号从低电平到高电平之间的电压差,对于单端信号通常由信号的供电电压决......

qq_29476769的博客 2万+

C++模板(函数模板/类模板)

Ⅰ、编程 Ⅱ、函数模板 1、函数模板概念 2、函数模板格式 3、函数模板的原理 4、函数模板的实例化 1.隐式实例化 2.显示实例化 5、模板参数的匹配原则 ​编辑补充:函数不一定都能推演,但是类模板一定要指定 Ⅲ、类模板 1、类模板的定义格式 2、类模板的实例化 3、类外定义类模板参数 4、模板的分离编译......

qq_61386381的博客 1万+

保姆级教程:用Zemax 18.9复现单模光纤耦合仿真(附康宁SMF-28e参数)

本文提供了一份详细的Zemax 18.9单模光纤耦合仿真教程,以康宁SMF-28e为例,涵盖从软件设置、材料参数输入到系统构建和优化的全流程。通过光束耦合分析和物理光学传播(POP)技术,帮助用户准确模拟光纤耦合效率,并解决常见问题,适用于光学设计初学者和专业人士。

weixin_27330481的博客 313

健康保险费用预测:可解释机器学习在精算建模中的实战落地

健康保险费用预测是医疗AI与保险科技交叉领域的核心任务,本质是基于临床变量与社会因素对个体医疗支出进行风险量化。其技术原理需兼顾统计建模能力与监管可解释性,XGBoost+SHAP组合因支持特征归因、边际效应分析和临床可干预推演,成为保险精算场景的主流选择。该技术显著提升保费定价精度、降低偿付风险,并支撑DRG费用预警、团险核保辅助及再保险尾部风险评估等关键应用。本文聚焦真实产线中的时间序列验证、临床分层特征工程与监管红线指标(如Bias@90th、Calibration Slope),深入解析如何让模型不

weixin_33702545的博客 306

C++ 函数模板和类模板

因此,为了避免在每个编译单元都定义函数模板,建议在头文件中对函数模板进行声明定义(即将函数模板的声明和定义都写在一个头文件中,然后在需要使用函数模板的地方加上该头文件)。

Levon123的博客 1691

AI处理器组合

编号0-3的处理器处于同一个链路中,编号4-7的处理器处于另外一个链路中,不通链路中的处理器不能通信,如下图所示。- 如果申请处理器个数为1,则选择同一链路,剩余可用的处理器数量为1个的最佳,其次是剩余3个的为次佳,然后是剩余2个,最后是剩余4个。输出为组合列表,当array=[0, 1, 4, 5, 6, 7] ,num=1时,输出为[[0], [1]]- 如果申请处理器个数为2,则选择同一链路剩余可用的处理器数量2个的为最佳,其次是剩余4个,最后是剩余3个。任务申请1个处理器。

面试高手的博客 1万+

c++模板(函数模板,类中函数模板,类模板)

减少程序中的冗余信息。如:多个函数或类的除了参数类型外,其余都完全相同时,可以使用模板来减少重复信息(参考函数重载时,输入参数数量也相同的情况)

lucust的博客 3902

SAP 采购申请、采购订单的审批策略

采购申请、采购订单的审批策略 采购申请审批 PR审批可以分为:含分类、无分类 1、无分类PR审批: A、后台配置: 设置批准代码(批准代码可以设置多级审批): 发布批准标识使用系统已有的 “2 询价/采购订单”: 新建采购申请审批策略Z1(仅设置1级审批,一共可以设置8级审......

willieyuan的博客 2万+

Supreme小程序自动化抢购终端——源码架构与执行流程全解析

本系统是一套基于开发的桌面端小程序自动化抢购终端。把只有开发者能跑的脚本,包装成普通用户也能操作的桌面工具。参数自动捕获 → 商品多关键词检索 → sku/尺码/库存映射 → 多商品任务队列 → 定时/立即抢购 → 订单创建 → 支付参数拉取 → 本地服务生成支付链接 → 手机微信扫码付款这套 Supreme 抢购终端,表面上看是一个"下单工具"。但从工程角度审视,它已经具备了一个小型桌面自动化系统GUI 层:CustomTkinter 现代化界面,线程安全业务层:多商品队列、定时调度、任务编排。

猫敷雪 202

c++的函数模板,类模板

现在的c++编译器实现了c++新增的一项特性——函数模板。函数模板是通用的函数描述,也就是说,它们使用泛型可用具体的类型(如int或double)替换。通过将类型作为参数传递给模板,可使编译器生成该类型的函数。由于模板允许以泛型(而不是具体类型)的方式编写程序,因此有时也被称为通用编程。由于类型是用参数表示的,因此模板特性有时也被称为参数化类型。

sakura0908的博客 1555

LED灯闪烁实验:实验介绍

每个章节都会单独进行验证工作,例如Simulink开发的应用层软件,会在Simulink-TestHarness中进行仿真,通过Scope示波器模块输出0-1交替的结果。CubeIDE集成双方的代码后,会烧写到开发板中验证是否按照定义的时间进行闪烁。ST-LINK V2是STM32开发生态系统中常用的硬件调试接口,能够连接微控制器与开发环境,实现程序的下载、调试和分析。STM32F103C8T6最小系统板是基于STM32F103C8T6微控制器的开发板,本实验会涉及使用板载的连接PC13引脚的LED灯。

u013288925的博客 457

C++模板、类模板、函数模板详解都在这里了

C++模板、类模板、函数模板详解一、引言二、函数模板1、定义2、调用3、多个虚类型三、类模板1、定义2、调用四、类的函数模板五、类作为数据类型传入六、类模板与继承七、类模板与友元 一、引言 在写排序算法时,如果要写一个交换两个数据的函数,由于基本数据类型有int、float、double等等类型,所以针对每种数据类型可能我们要写很多swap函数,这些函数除了传入的数据类型不同,函数体结构大致相同。...

hsxyfzh的博客 1万+

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

【C++入门】C++ 函数模板&类模板

C++ 函数模板&类模板 主要内容 一、函数模板包括: 1.函数模板的定义 2.函数模板的实例化 3.函数模板的重载 4.函数模板和函数的次序 5.函数模板示例:Map 二、类模板包括: 1.类模板的定义 2.函数模版作为类模板成员 3.类模板与非类型参数 4.类模板与派生 5.类模板与友元 6.类模板与静态成员变量

PKM of bk 8591

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

C++之函数模板&&类模板

class 类模板名// 类内成员定义在之前自我实现链表时,我们会定义一个datatype是为了适应不同类型的数据,而到了c++这里,模板就可以很好的解决这个问题。

zzh_Zao的博客 1945

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

【C++】函数模板与类模板

类模板允许你定义一个类,该类可以在编译时接受一个或多个类型参数。这使得你可以编写与类型无关的代码,从而可以重用代码,同时又能针对不同的数据类型进行优化和定制。类模板定义格式:类模板的定义使用关键字 template 和一个或多个类型参数。public:// 构造函数// 返回存储的值// 设置新的值核心特性:​​参数化类型​​:用占位符(如 typename T)表示未确定的类型。

2301_78649394的博客 1151

C++:函数模板,类模板

我们在平常编写C代码的时候,总是会因为类型的原因而需要重复的去写实现思路一样的函数,比如我们常用的swap函数。而在C++中,之前我们已经了解过函数重载这一概念。但函数重载一旦二者类型不同,便需要重新再写一个重载去解决问题,而函数模板便解决了这个麻烦。

xiuwoaiailixiya的博客 1464

【C++提高】函数模板和类模板

模板就是通用的模具,它会大大提高代码的复用性。C++另一种编程思想称为泛型编程,主要利用的技术就是模板。C++提供两种模板机制,分别是函数模板和类模板。

weixin_44446626的博客 1395

【C++】函数模板&类模板

模板的概念: C++除了面向对象编程的编程思想,还有一种编程思想就是泛型编程,泛型编程的具体例子就是模板。所谓模板,就是一个通用的类型,我们可以向模板传递不同的数据类型,从而得到不同的具体类型。C++中提供的模板有函数模板和类模板; 函数模板: 函数模板定义: 函数模板的作用就是将函数的数据类型参数化,什么意思,就是我们平常写的函数都是具体有形参类型,返回类型,里面具体数据类型的。类型参数化可以在我们写函数时将这些数据类型变成未知的变量,从而得到一个函数模板,我们可以根据传入不同的数据类型得到不同.

m0_61151031的博客 3411

【 C++ 】模板初阶 —— 函数模板、类模板

目录 1、泛型编程 2、函数模板 函数模板概念 函数模板格式 函数模板的原理 函数模板的实例化 模板参数的匹配原则 3、类模板 类模板的定义格式 类模板的实例化 4、补充 函数模板一定是推演?类模板一定是指定? 模板的分离编译...

bit_zyx的博客 1696

【C++】函数模板与类模板讲解

本篇文章会对C++中的模板进行讲解,其中会对函数模板和类模板进行讲解。希望本篇文章会对你有所帮助。模板是C++中强大的泛型编程(编写与类型无关的通用代码,是代码复用的一种手段。模板是泛型编程的基础)工具,可以用于函数和类。通过使用模板,我们可以编写出更通用、灵活的代码,以适应不同类型的需求。

weixin_67596609的博客 1034

C++中模板总结:函数模板和类模板

C++中的一种编程思想称为泛型编程,主要利用的技术就是模板。 C++提供两种模板机制:函数模板和类模板 总结: 1、函数模板利用关键字template 2、使用函数模板有两种方式:自动类型推到、显示指定类型 3、模板的目的是为了提高复用性,将类型参数化 注意事项: 1、自动类型推导,必须推导出一致的数据类型T,才可以使用 2、模板必须要确定出T的数据类型,才可以使用 ...

桔子皮的博客 551

C++ 函数模板与类模板

C++模板编程解析:函数模板与类模板 本文详细介绍了C++中的模板编程技术,包括函数模板和类模板。函数模板通过template<class T>声明通用函数,支持自动类型推导和显式实例化两种方式。类模板则允许创建处理不同数据类型的通用类,必须显式实例化。以Stack类为例,展示了模板在实现动态数组、扩容操作等场景中的应用。模板技术能显著提高代码复用性和可维护性,是C++编程中的重要特性。文章通过代码示例详细解析了两类模板的基本概念、实现方法和使用场景。

2501_91602899的博客 1330

C++函数模板,类模板

函数模板,类模板

qq_74276498的博客 1297

C++函数模板与类模板

首先进行模板的声明,完成模板声明后,虚拟类型名就可以用于模板函数的定义;在对程序进行编译时,编译系统会自动将函数名与模板相匹配,将实参的类型取代函数模板中的虚拟类型。模板函数定义的形式如下:函数返回值类型 函数名(虚拟类型名 参数名, 虚拟类型名 参数名,…)1)函数返回值类型可以为void,且不一定必须与参数类型一致!2)当虚拟类型只有一个时,传参就必须传相同类型;3)如果想传入多个不同类型的参数,则在函数模板声明和模板函数定义时,多加几个虚拟参数类型。在模板类之前,加上类模板的声明;

pl0020的博客 965
上一篇: c++之模板方法模式
下一篇: c++之状态模式
Qt上位机开发
Qt上位机开发 领域专家: C/C++技术领域 领域专家: C/C++技术领域
博客等级 码龄9年 9664粉丝 178原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值