C++模板 — 函数模板

动态对抗Zygisk-IL2CppDumper:Unity游戏安全新策略 本文深入探讨了对抗Zygisk-IL2CppDumper攻击的Unity游戏安全新策略。通过实时内存监控、动态混淆技术和异常行为检测体系,有效防止关键代码被动态提取。文章详细介绍了内存指纹系统、运行时混淆方案和五维特征模型等实用防御手段,帮助开发者提升游戏安全性。 阅读详情

目录

快速理解模板

泛型与模板

函数模板

函数模板调用顺序

普通函数与函数模板区别

类型一致


快速理解模板

模板就是建立通用的模具,大大提高复用性:
例如,生活中的寸照模板或是PPT模板;

模板特点:

  1. 模板不可以直接使用,它只是一个框架(你的寸照必须要有你的头像和模板结合才是真正的寸照)
  2. 模板的通用并不是万能的(人的寸照模板不能用于宠物的)

 

泛型与模板

泛型程序设计(generic programming)是一种算法在实现时不指定具体要操作的数据的类型的程序设计方法。所谓“泛型”,指的是算法只要实现一遍,就能适用于多种数据类型。泛型程序设计方法的优势在于能够减少重复代码的编写。

泛型程序设计的概念最早出现于 1983 年的 Ada 语言,其最成功的应用就是 C++ 的标准模板库(STL)。也可以说,泛型程序设计就是大量编写模板、使用模板的程序设计。泛型程序设计在 C++ 中的重要性和带来的好处不亚于面向对象的特性。

在 C++ 中,模板分为函数模板和类模板两种。熟练的 C++ 程序员,在编写函数时都会考虑能否将其写成函数模板,编写类时都会考虑能否将其写成类模板,以便实现重用。

函数模板

函数模板的写法如下:

template <class 类型参数1, class类型参数2, ...>
返回值类型  模板名(形参表)
{
    函数体
}

试一试:

#include <iostream>
using namespace std;
template<class T>
void Swap(T & x, T & y)
{
	T tmp = x;
	x = y;
	y = tmp;
}
int main()
{
	int n = 1, m = 2;
	//使用模板的两种方式:①自动推导型;②显示指定型
	Swap(n, m);  //编译器自动生成 void Swap (int &, int &)函数。这是自动推导性

	double f = 1.2, g = 2.3;
	Swap(f, g);  //编译器自动生成 void Swap (double &, double &)函数

	float x = 1.1, y = 2.2;
	Swap<float>(x, y);  //显示指定类型
	return 0;
}

注意:编译器由模板自动生成函数的过程叫模板的实例化。由模板实例化而得到的函数称为模板函数。在某些编译器中,模板只有在被实例化时,编译器才会检查其语法正确性。如果程序中写了一个模板却没有用到,那么编译器不会报告这个模板中的语法错误。

函数模板调用顺序

函数模板可以重载,只要它们的形参表不同即可。

在有多个函数和函数模板名字相同的情况下,一条函数调用语句到底应该被匹配成对哪个函数或哪个模板的调用呢? C++编译器遵循的调用规则(顺序)如下:

1. 如果函数模板和普通函数都可以实现,优先调用普通函数

2. 再找参数完全匹配的模板函数。此外,还可以强制调用模板函数

3. 再找实参经过自动类型转换后能够匹配的普通函数

4. 如果上面都找不到,则报错

//普通函数与函数模板调用规则示例:
void myPrint(int a, int b)
{
	cout << "调用的普通函数" << endl;
}

template<typename T>
void myPrint(T a, T b)
{
	cout << "调用的模板" << endl;
}

template<typename T>
void myPrint(T a, T b, T c)
{
	cout << "调用重载的模板" << endl;
}

void test01()
{
	//1、如果函数模板和普通函数都可以实现,优先调用普通函数
	// 注意:如果告诉编译器普通函数是有的,但只是声明没有实现,或者不在当前文件内实现,就会报错找不到
	int a = 10;
	int b = 20;
	myPrint(a, b); //调用普通函数

	//2、可以通过空模板参数列表来强制调用函数模板
	myPrint<>(a, b); //调用函数模板

	//3、函数模板也可以发生重载
	int c = 30;
	myPrint(a, b, c); //调用重载的函数模板

	//4、 如果函数模板可以产生更好的匹配,优先调用函数模板
	char c1 = 'a';
	char c2 = 'b';
	myPrint(c1, c2); //调用函数模板
}

int main() 
{
	test01();
	system("pause");
	return 0;
}

普通函数与函数模板区别

  1. 普通函数调用时可以发生自动类型转换(隐式类型转换)
  2. 函数模板调用时,如果利用自动类型推导,不会发生隐式类型转换
  3. 如果利用显示指定类型的方式,可以发生隐式类型转换
//普通函数
int myAdd01(int a, int b)
{
	return a + b;
}

//函数模板
template<class T>
T myAdd02(T a, T b)
{
	return a + b;
}

//使用函数模板时,如果用自动类型推导,不会发生自动类型转换,即隐式类型转换
void test01()
{
	int a = 10;
	int b = 20;
	char c = 'c';

	cout << myAdd01(a, c) << endl; //正确,将char类型的'c'隐式转换为int类型  'c' 对应 ASCII码 99
	//myAdd02(a, c); // 报错,使用自动类型推导时,不会发生隐式类型转换

	myAdd02<int>(a, c); //正确,如果用显示指定类型,可以发生隐式类型转换
}

类型一致

使用模板时,使用自动推导则必须所有类型都一致;否则不能直接使用模板函数。

//利用模板提供通用的交换函数
template<class T>
void mySwap(T& a, T& b)
{
	T temp = a;
	a = b;
	b = temp;
}

// 1、自动类型推导,必须推导出一致的数据类型T,才可以使用
void test01()
{
	int a = 10;
	int b = 20;
	char c = 'c';
	mySwap(a, b); //正确,可推导出一致的T类型
	//mySwap(a,c); 错误,推导不出一致的T类型
}


//2、模板必须要确定出T的数据类型,才可以使用
template<class T>
void func()
{
	cout << "fun调用" << endl;
}

void test2()
{
	//func(); 错误,模板不能独立使用,必须给出T的类型;因为这种没法根据参数推导!
	func<int>(); //利用显示指定类型的方式,给T一个类型,才可以使用该模板
}

 

注:部分源代码和阐述出自“黑马程序员”相关学习文档!

#systemverilog# 之 event region 和 timeslot 仿真调度(二)例子 由于疫情的关系,一时半会回不了学校了。今天开始,哪怕在家也要克服惰性开始学习了。今天来个的想了很久但都犯懒而没动手的内容,就是关于仿真软件在跑systemverilog的时候,是如果通过将HDL代码分成5个区域来编译,从而实现用软件模拟硬件的运行结果的思想。 首先,是基础概念,systemverilog标准划分了仿真软件的5个跑仿真所要执行的区域,说白了就是规定了软件在跑代码的时候要把代码分成5类,放到5个堆栈里面分别跑,这样才能:明明在软件上是以顺序方式来执行代码的,却能“看似”像在硬件中那样的实现并行 阅读详情

相关推荐

从零开始:如何用大语言模型构建你的第一个路径规划智能体

本文详细介绍了如何利用大语言模型(LLM)构建路径规划智能体,从基础概念到实战案例,涵盖TSP和CVRP问题的解决方案。通过选择合适的LLM模型、设计有效的提示工程和实现自我验证,即使没有运筹学背景也能快速上手。文章还提供了部署与优化智能体的实用技巧,帮助读者在物流配送、机器人导航等领域应用这一技术。

weixin_28256233的博客 485

C语言中文网C++学习笔记

C语言中文网C++学习笔记

u014685611的博客 1531

金蝶云星空应用开发初级考试题目汇总

摘要:本文为金蝶云星空应用开发初级考试题目汇总

2401_86113757的博客 3799

C++模板函数

模板函数与类模板1.模板函数1.模板函数的声明与定义2.模板函数的调用显式类型调用自动推导3.模板函数的底层实现 1.模板函数 1.模板函数的声明与定义 C++提供了模板(template)编程的概念。所谓模板,实际上是建立一个通用函数或类,其类内部的类型和函数的形参类型不具体指定,用一个虚拟的类型来代表。这种通用的方式称为模板。模板是泛型编程的基础,泛型编程即以一种独立于任何特定类型的方式编写代码。 简单来说,就是我们提供一个抽象的函数,并不具体指定其中数据的类型,而是某个虚拟类型代替。只提供基本的功

weixin_45738899的博客 2万+

不只是对齐:用 MFA 和 Praat 给你的语音数据集快速生成 TextGrid 标注文件

本文详细介绍了如何利用Montreal Forced Aligner(MFA)和Praat工具快速生成TextGrid标注文件,大幅提升语音数据标注效率。通过批量对齐、质量校验和跨语言处理等实战技巧,帮助研究者构建自动化标注流水线,适用于语音合成和语音识别等多种应用场景。

weixin_30675247的博客 378

SAP BASIS运维之三方SSL证书导入

事情的起因是我司SAP使用的SSL证书即将要到期了(上一个的SAP BASIS也辞职了),需要进行证书的更换。如上图所示,我司的证书有效期到2024年4月30日到期,需要提前预防并更换,防止过期后导致接口和访问出现问题。9.在弹出的框中,选择我们在第5个步骤中导出的转换结果存储地址,并选择导出的转换文件,点打开。12.最后一步也是关键的一步,不然就会无法更新证书,再点击左上角的个人安全环境,点另存为。10.在打开后的弹窗中,输入我们在第4个步骤中设置的密码。6.经过以上步骤后,我们获得了最终的证书文件。

fegda的专栏 1883

C++函数模板

2、将声明和实现写到同一个文件中,并更改后缀名为.hpp,hpp是约定的名称,并不是强制。类模板作用:建立一个通用类,类中的成员 数据类型可以不具体制定,用一个虚拟的类型来代表。建立一个通用模板,其函数返回类型和形参类型可以不具体制定,用一个虚拟的类型来代表。1、当子类继承的父类是一个类模板时,子类在声明的时候,要指定出父类中T的类型。利用函数模板封装一个排序的函数,可以对不同的数据类型的数组进行排序。1、自动类型推导,必须推导出一致的数据类型T,才可以使用。2、模板必须要确定出T的数据类型,才可以使用。

jax_ton的博客 6526

多模态大模型助力AI人工智能领域的智能决策

我们的目的是深入了解多模态大模型是怎样在AI人工智能领域帮助做出智能决策的。范围涵盖了多模态大模型的基本概念、工作原理、在不同场景下的应用,以及未来的发展方向等。接下来,我们会先介绍多模态大模型和智能决策的核心概念,再讲讲它们之间的关系。然后说说多模态大模型在智能决策中的算法原理和操作步骤,用数学公式来解释一下。接着通过一个项目实战案例让大家更直观地感受。之后看看多模态大模型在实际中的应用场景,推荐一些学习的工具和资源。最后探讨未来的发展趋势和挑战,进行总结并提出一些思考题。多模态大模型。

AIGC应用创新大全的博客 918

C++ 函数模板基础

C++ 函数模板基础

英雄哪里出来 5074

从重复劳动到智能闭环:OpenClaw实战搭建小红书&公众号全自动化运营体系

如果你有一定的代码开发能力,还可以为OpenClaw开发自定义插件,拓展更多的功能,比如对接更多的平台,实现图文+短视频的全平台自动化运营;对接视频剪辑工具,实现短视频脚本生成、剪辑、配音、发布的全流程自动化;对接私域运营工具,实现公域引流、私域承接、用户转化的全链路自动化;对接电商平台,实现内容种草、商品上架、订单管理的全流程自动化,打造完整的内容电商闭环。新媒体运营的本质,是内容价值的传递,而不是机械的重复劳动。

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 310

【网络与爬虫 53】Scrapy-Prometheus实战指南:打造企业级爬虫监控体系的终极解决方案

本文深入探讨Scrapy-Prometheus集成技术,通过费曼学习法从监控痛点出发,详细讲解如何在Scrapy爬虫中集成Prometheus指标收集系统。涵盖从基础配置到企业级监控体系的完整实战指南,帮助开发者构建可观测性强、可维护性高的分布式爬虫监控平台,实现爬虫性能的精准监控和智能告警。

熵数实验室 1584

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

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

hsxyfzh的博客 1万+

【2026年华为暑期实习(AI)-4月8日-第一题- 选择题】(题目+思路+Java&C++&Python解析+在线测试)

答案与解析 1. 相关系数问题 答案:C. 完全负线性相关 解析:相关系数ρ=-1表示X和Y之间存在完全负线性相关关系,所有数据点都严格落在一条斜率为负的直线上。 2. 矩阵秩问题 答案:B. Σ的对角线上非零奇异值的个数 解析:矩阵A的秩等于其奇异值矩阵Σ中非零奇异值的个数,因为U和V都是正交矩阵,不改变矩阵的秩。 3. 条件概率问题 答案:B. 0.5 解析:根据全概率公式和贝叶斯公式计算,P(B)=0.5×0.4+0.3×0.6=0.38,P(A|B)=(0.5×0.4)/0.38≈0.526,最接近

m0_73659489的博客 287

C++函数模板及实现原理

C++为我们提供了函数模板机制。所谓函数模板,实际上是建立一个通用函数,其函数类型和形参类型不具体指定,用一个虚拟的类型来代表。这个通用函数就称为函数模板。 凡是函数体相同的函数都可以用这个模板来代替,不必定义多个函数,只需在模板中定义一次即可。在调用函数时系统会根据实参的类型来取代模板中的虚拟类型,从而实现了不同函数的功能。     为什么要有函数模板     下面,我们就通过一个例子来说

常敲代码手不抖 2万+

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

C++编程——函数模板

文章目录1 函数模板语法2 函数模板注意事项3 函模模板案例4 普通函数与函数模板的区别5 普通函数与函数模板的调用规则6 模板的局限性 模板就是建立通用的模具,大大提高复用性 模板的特点: 模板不介意直接使用,它只是一个框架 模板的通用并不是万能的 C++另一种编程思想称为泛型编程,主要利用的技术就是模板 C++提供两种模板机制:函数模板和类模板 本文介绍的是函数模型的知识 1 函数模板语法 函数模板作用:建立一个通用函数,其函数返回值类型和形参类型可以不具体制定,用一个虚拟的类型来代表 语法: te

professor_tao的博客 6176

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

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

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

weixin_44446626的博客 1395

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

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

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

2301_78649394的博客 1151

cpp中的函数模板

之前我们讲了函数重载,对一个不同参数类型的函数作出了不同的行为,但是其实有一个更加高效的方式,那就是函数模板,也叫泛型编程。或者模板元编程。下面是一个交换两个元素的例子我们只需要在调用时指定类型就可以我们也可以指定两种类型,下面的程序没有什么实际意义,就是为了展示一下

Lyajpunov的博客 1434

C++ 函数模板

函数模板:通过模板参数定义通用函数,编译器根据实际参数类型生成具体函数实现。decltype:用于在编译时查询表达式的数据类型,不计算表达式的值。函数后置返回类型:允许将返回类型放在函数参数列表之后,适用于复杂类型推导。注意事项:包括模板参数的匹配、隐式类型转换、多个参数、模板重载等。函数模板的具体化:允许为特定类型提供函数模板的特定实现。通过这些概念和用法,你可以编写更灵活和强大的模板代码,处理各种复杂的类型和表达式。

qq_50373827的博客 1445

C++模板(1)函数模板

此外,函数模板本身也可以被重载,即名称相同的函数模板可以具有不同的函数模板定义,当进行函数调用时,编译器根据实参的类型与个数决定调用哪个函数模板实例化函数。在 C++ 中,模板是一种泛型编程的工具,它允许程序员编写通用的代码,可以适用于不同的数据类型。隐式实例化是指在使用模板时,编译器根据实际参数的类型自动推断出模板参数的类型,并生成相应的实例化代码。函数模板作用:建立一个通用函数,其函数返回值类型和形参类型可以不具体制定,用一个虚拟的类型来代表。T —— 通用的数据类型,名称可以替换,通常为大写字母。

m0_74520482的博客 846

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

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

桔子皮的博客 551

c++函数模板

/ 函数体template关键字表示接下来的代码是一个函数模板的定义typename表示模板参数的类型T是一种类型参数的通用名字func_name即函数模板的名称。在 C++98 添加关键字 typename 之前,C++使用关键字 class 来创建模板。函数模板中的参数列表可以是任意数量的、任意类型的参数。在函数模板中,可以使用模板参数来表示参数的类型、函数返回值的类型等。

u012011912的博客 1330

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

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

sakura0908的博客 1556
上一篇: Python数据类型 — 概览与索引
下一篇: C++模板 — 类模板
ALGO阿狗
博客等级 码龄9年 64粉丝 149原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值