C++函数模板

C++中的函数模板 之前我们知道的交换两个变量的方法有宏定义、函数,这两种方式都能实现两个变量的交换,但是各有各的优缺点 宏定义: - 优点:代码复用,适合所有的类型 - 缺点:缺少类型检查,宏在预处理阶段就被替换掉,编译器并不知道宏的存在 函数: - 优点:真正的函数调用,编译器对类型进行检查 - 缺点:类型不同需要重复定义函数,代码无法复用 上边两种方式... 阅读详情
C++提供了函数模板(function template)。所谓函数模板,实际上是建立一个通用函数,其函数类型和形参类型不具体指定,用一个虚拟的类型来代表。这个通用函数就称为函数模板。凡是函数体相同的函数都可以用这个模板来代替,不必定义多个函数,只需在模板中定义一次即可。在调用函数时系统会根据实参的类型来取代模板中的虚拟类型,从而实现了不同函数的功能。看下面的例子就清楚了。

例4.7 将例4.6程序改为通过函数模板来实现。
#include <iostream>
using namespace std;
template<typename T>  //模板声明,其中T为类型参数
T max(T a,T b,T c) //定义一个通用函数,用T作虚拟的类型名
{
   if(b>a) a=b;
   if(c>a) a=c;
   return a;
}

int main( )
{
   int i1=185,i2=-76,i3=567,i;
   double d1=56.87,d2=90.23,d3=-3214.78,d;
   long g1=67854,g2=-912456,g3=673456,g;
   i=max(i1,i2,i3); //调用模板函数,此时T被int取代
   d=max(d1,d2,d3); //调用模板函数,此时T被double取代
   g=max(g1,g2,g3); //调用模板函数,此时T被long取代
   cout<<″i_max=″<<i<<endl;
   cout<<″f_max=″<<f<<endl;
   cout<<″g_max=″<<g<<endl;
   return 0;
}

运行结果与例4.5相同。为了节省篇幅,数据不用cin语句输入,而在变量定义时初始化。程序第3~8行是定义模板。

定义函数模板的一般形式为:
    template < typename T>  或  template <class T>
    通用函数定义  通用函数定义

在建立函数模板时,只要将例4.5程序中定义的第一个函数首部的int改为T即可。即用虚拟的类型名T代替具体的数据类型。在对程序进行编译时,遇到第13行调用函数max(i1,i2,i3),编译系统会将函数名max与模板max相匹配,将实参的类型取代了函数模板中的虚拟类型T。此时相当于已定义了一个函数:
int max(int a,int b,int c)
{
   if(b>a) a=b;
   if(c>a) a=c;
   return a;
}
然后调用它。后面两行(14,15行)的情况类似。

类型参数可以不只一个,可以根据需要确定个数。如
    template <class T1,typename T2>
可以看到,用函数模板比函数重载更方便,程序更简洁。但应注意它只适用于函数的参数个数相同而类型不同,且函数体相同的情况,如果参数的个数不同,则不能用函数模板。
AUTOSAR 3万字面试题全面解析(持续更新) ECU抽象层(EAL)是AUTOSAR架构中的一部分,它位于微控制器抽象层(MCAL)之下,但通常与MCAL一起被提及。EAL的目标是提供一个统一的接口来访问和管理ECU(Electronic Control Unit,电子控制单元)的硬件资源,包括处理器、存储器和外围设备。通过这种抽象,EAL使得上层软件能够以一种标准化的方式与ECU硬件交互,而不需要关心具体的硬件实现细节。EAL解决了硬件异构性带来的问题,即不同ECU可能采用不同类型的处理器和硬件配置。 阅读详情

相关推荐

【故障排查】telnet连接失败:端口23不可达的深度分析与解决方案

本文深度解析telnet连接失败时端口23不可达的常见原因与解决方案。从快速自查目标地址、端口到服务端排查,涵盖服务状态检查、防火墙配置及安全组设置,并提供进阶诊断工具与抓包分析方法。文章强调telnet协议的安全风险,建议在生产环境中改用SSH等加密协议进行远程管理。

weixin_28323057的博客 396

C++之函数模板

函数模板

程序员的规则 7153

STM32H750VBT6在Keil5下载失败?5步搞定Flash Download Failed Cortex-M7错误

本文针对STM32H750VBT6在Keil5中遇到的“Flash Download Failed - Cortex-M7”错误,提供了系统性的五步排查法。从硬件连接到驱动检查,再到核心的Flash算法配置、链接脚本核对,以及芯片保护状态等深度排查,帮助开发者快速定位并解决下载失败问题,尤其适用于处理内部Flash与外部QSPI Flash的混合应用场景。

weixin_29239279的博客 481

C/C++编程:函数模板

入门 max.h #pragma once // 类型参数T表示支持所有类型 template<typename T> inline T const &max(T const &a, T const &b){ return a < b ? a : b; } max.cpp #include <iostream> #include <max.h> int main(int argc, char **argv) { i

OceanStar的博客 711

避坑指南:从聚宽迁移到QMT必须知道的5个细节(含Redis连接异常处理)

本文详细解析了从聚宽迁移到QMT平台时需注意的5个关键细节,特别是Redis连接池优化和xtquant重连机制。通过实战代码示例,帮助量化团队解决信号传递稳定性、时间同步、滑点控制等核心问题,确保交易策略平稳过渡。

weixin_27303545的博客 430

季节性注意力的时间序列预测模型 SAITS 进行数据补齐 完整代码数据

季节性注意力的时间序列预测模型 SAITS 进行数据补齐 完整代码数据

1072

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

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

hsxyfzh的博客 1万+

Python爬虫教程:抓取区块链交易信息及加密货币市场数据

随着区块链技术和加密货币的迅猛发展,区块链交易和加密货币市场的数据逐渐成为金融、技术、经济研究等领域的热点。对于开发者和研究者而言,实时获取区块链交易数据和加密货币市场行情,对于投资分析、市场预测、技术研究等具有重要的参考价值。本文将通过Python爬虫技术,介绍如何抓取区块链交易信息及加密货币市场数据,详细阐述数据获取的原理、技术方案、实现方法以及抓取到的数据的存储与分析。我们将依托最新的爬虫技术,如requestsSeleniumScrapy,以及相关的数据处理库(如pandasmatplotlib。

2201_76125261的博客 2778

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

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

常敲代码手不抖 2万+

SAP采购申请审批策略配置简介

SAP采购申请审批策略配置简介 1、CT04创建特征

我小时候很黑的博客 8162

YOLO26 终极蒸馏指南:从入门到 SOTA (The Ultimate Distillation Guide)

《YOLO26 蒸馏技术指南》深入解析了知识蒸馏在目标检测中的应用,提出五大蒸馏范式:响应蒸馏(学习最终输出)、特征蒸馏(模仿中间特征)、关系蒸馏(捕捉通道关联)、CWD(通道语义对齐)和FGD(前景背景分离)。实验表明,"Response KD + CWD + FGD"组合效果最佳,使YOLO26n在0.5ms推理速度下达到0.956 mAP50,甚至超越教师模型。指南提供模块化代码实现和超参数调优建议,强调蒸馏能平衡模型精度与效率,是轻量化部署的有效方案。

weixin_51988935的博客 717

cpp中的函数模板

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

Lyajpunov的博客 1434

R语言glm函数构建二分类logistic回归模型、epiDisplay包logistic.display函数获取模型汇总统计信息(自变量初始和调整后的优势比及置信区间,回归系数的Wald检验的p值

R语言glm函数构建二分类logistic回归模型(family参数为binomial)、使用epiDisplay包logistic.display函数获取模型汇总统计信息(自变量初始和调整后的优势比及置信区间,回归系数的Wald检验的p值)

statistics+insight+vista+power 1398

C++函数模板的详细讲解【函数模板的概念、用法及其模板函数的概念知识】

目录前言C++函数模板的使用函数模板语法1.模板说明2.函数定义3.函数模板调用模板函数函数模板和函数重载 前言 C++提供了模板(template)编程的概念。所谓模板,实际上是建立一个通用函数或类,其类内部的类型和函数的形参类型不具体指定,用一个虚拟的类型来代表。这种通用的方式称为模板。模板是泛型编程的基础,泛型编程即以一种独立于任何特定类型的方式编写代码。 C++函数模板的使用 为什么要有函数模板 例如,在一个项目中,有个项目需求是能够实现多个函数用来返回两个数的最大值,要求能支持char类型、int

m0_53636439的博客 5万+

pscad IEEE标准系统搭建说明

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

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

C++ 函数模板基础

C++ 函数模板基础

英雄哪里出来 5075

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

C++编程——函数模板

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

professor_tao的博客 6176

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

C++ 函数模板

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

qq_50373827的博客 1445

Cpp--C++中函数模板的用法详细解析

C++中的模板可分为函数模板和类模板,而把函数模板的具体化称为模板函数,把类模板的具体化成为模板类。下面让我们分别看看什么是函数模板和类模板吧 1.什么是模板 假设现在我们完成这样的函数,给定两个数x和y求式子x^2 + y^2 + x * y的值 .考虑到x和y可能是 int , float 或者double类型,那么我们就要完成三个函数: int fun(

samkieth 806

CPP_函数模板

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_33727510的博客 437

c++函数模板

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

u012011912的博客 1330

【C++之函数模板】数据排序

题目要求: 对n个数据进行从小到大排序,数据类型可以是整型、单精度型、双精度型,用函数模板。 ——谭浩强的《C++面向对象程序设计》第1章习题第14小题

霍喜猫的博客 4963

C++函数模板的使用

C++函数模板的简单使用函数模板的基本形式函数模板的重载给函数模板传入常量的形式 函数模板的基本形式 函数模板的语法示例: template<typename T> T abs(T x){ return x<0?-x:x; } 其中T可以指代任何类型。 函数模板的重载 函数模板的重载与普通函数的重载形式上是一样的。 template<typename T> ...

首飞的博客 497
上一篇: C++内联函数
下一篇: C++ 友元
ReverseThinking
博客等级 码龄14年 1粉丝 12原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值