C++ 函数模板

article/2025/9/7 14:01:11

函数模板是通用的函数描述,它们使用泛型来定义函数,其中的泛型可用具体的类型替换。通过将类型作为参数传递给模板,可使编译器生成该类型的函数。由于模板允许以泛型(而不是具体类型)的方式编写程序,因此有时候也被称为通用编程。

在标准C++98添加关键字typename之前,C++使用关键字class来创建模板。例如:

在C++11中,可以将class替换为typename。

 

调用该函数模板:

 

 

重载的函数模板

例如:

 

模板的显示具体化

假设有一个结构体,C++允许将一个结构体赋给另一个结构体,如果只想交换其中部分成员,则需要不同的代码。

可以提供一个具体化函数定义——显示具体化。当编译器找到与函数调用匹配的具体化时,将使用该定义,而不再寻找模板。

1. 对于给定的函数名,可以有非模板函数,模板函数,和显示具体化函数以及它们的重载版本。

2.显示具体化的原型和定义应以template<>打头,并通过名称来指出类型。

3.具体化优先于常规模板,非模板函数优先于具体化和模板函数。

例如:

 

实例化:

函数调用swap(i,j)导致编译器生成swap()的一个实例,该实例使用int类型。

模板并非函数定义,但使用int的模板实例就是函数定义,这种实例化方式被称为隐式实例化。

C++允许显示实例化,template void swap<int>(int&, int & )

 

编译器选择使用哪个函数版本

对于函数重载,函数模板,函数模板重载,C++有定义一个良好的策略,来决定为函数调用使用哪一个函数定义,尤其是有多个参数时,这个过程称为重载解析。

1.完全匹配,但常规函数优先于模板。

2.提升转换(char 与short自动转换为int,float自动转换为double)。

3.标准转换(int转换为char,long转换为double)。

4.用户定义的转换,如类声明中定义的转换。

 

函数的变量类型与返回类型

函数有多个参数类型时

x + y 的类型无法预测出来,使用decltype关键字来猜测类型。

 

如果函数有返回值类型:无法预先知道x + y的类型,此时还未声明参数x 和 y,他们不在作用域内(编译器无法看到它们,无法使用它们)。必须在声明参数后使用decltype。

现在,decltype在参数后边声明,因此x, y位于作用域内,可以使用它们。


http://chatgpt.dhexx.cn/article/Pig62WWi.shtml

相关文章

lead窗口函数

lead函数在Impala中可以配合over使用&#xff0c;lead函数有三个参数 lead(property,num,default) 第一个参数「property」标识想查询的列&#xff0c;「num」标识相对于当前行的第num行&#xff0c;第三个参数是默认值。 举例&#xff1a; -- 建表 CREATE TABLE test(id s…

C++ 仿函数

文章目录 1.由来2.定义3.实例参考文献 1.由来 我们先从一个非常简单的问题入手&#xff0c;来了解为什么要有仿函数。 假设我们现在有一个数组&#xff0c;数组中存有任意数量的数字&#xff0c;我们希望能够统计出这个数组中大于 10 的数字的数量&#xff0c;你的代码很可能…

心形函数的几种表达式

用两个函数表示&#xff1a; f(x)sqrt(1-(abs(x)-1)^2) h(x)-2*sqrt(1-0.5*abs(x)) 也可以根据图中的q(x)画出心形的内部&#xff1a; q(x)(f(x)-h(x))/2*cos(200*x)(f(x)h(x))/2 带入得&#xff1a; 用一个函数表示&#xff0c;我拟合了很久才画出来的&#xff1a; f(x)…

共轭函数

共轭函数在最近火的不行的Gan生成对抗神经网络进阶版本的数学推理中有着神奇的作用&#xff0c;因此在这边记录下。 共轭函数的定义为&#xff1a; f ∗ ( t ) max ⁡ x ∈ dom ⁡ ( f ) { x t − f ( x ) } f ^ { * } ( t ) \max _ { x \in \operatorname { dom } ( f ) }…

高斯函数解析

高斯函数广泛应用于统计学领域&#xff0c;用于表述正态分布&#xff0c;在信号处理领域&#xff0c;用于定义高斯滤波器&#xff0c;在图像处理领域&#xff0c;二维高斯核函数常用于高斯模糊&#xff0c;在数学领域&#xff0c;主要用于解决热力方程和扩散方程。 https://blo…

PostgreSQL 函数

PostgreSQL 函数 函数的定义 使用函数&#xff0c;可以极大的提高用户对数据库的管理效率。函数表示输入参数表示一个具有特定关系的值。 一、数学函数 绝对值函数、三角函数、对数函数、随机函数等&#xff0c;当有错误产生时&#xff0c;数学函数会返回null值。 二、函数…

EXCEL IFS函数简单使用

IFS函数的使用&#xff1a; 在学生成绩以及绩效考核中&#xff0c;我们需要对每个范围的成绩打分。比如【A】,【B】,【C】,【D】。可以使用【IFS()函数】完成操作。 1&#xff1a;选择单元格【C2】&#xff0c;输入【】&#xff0c;点击【fx】&#xff0c;弹出【插入函数】对话…

函数的返回值

1.什么是函数的返回值? print 和 return 的区别,print 仅仅是打印在控制台,而 return 则是将 return 后面的部分作为返回值作为函数的输出 可以用变量接走,继续使用该返回值做其它事 函数需要先定义后调用,函数体中 return 语句的结果就是返回值 如果一个函数没有 reutrn…

反双曲函数

Chapter10&#xff1a;反双曲函数 10.3 反双曲函数10.3.1 反双曲正弦函数【 yarsinh(x) 】反双曲正弦函数图像反双曲正弦函数的指数形式反双曲正弦函数的对数形式推导反双曲正弦函数的导数推导 10.3.2 反双曲余弦函数【 yarcosh(x) 】反双曲余弦函数图像反双曲余弦函数的指数形…

损失函数作用

前言&#xff1a;损失函数是机器学习里最基础也是最为关键的一个要素&#xff0c;通过对损失函数的定义、优化&#xff0c;就可以衍生到我们现在常用的机器学习等算法中 损失函数的作用&#xff1a;衡量模型模型预测的好坏。 正文&#xff1a; 首先我们假设要预测一个公司某商品…

Python自定义函数

一、自定义函数的固定语句 def contrast(a,b) : #使用def来定义一个名称为contrast的方法,a与b的值是两个变量&#xff0c;称为形参if a>b : #使用条件语句进行判定return a #返回a的值elif b>a :return b #返回b的值else:return (ab) …

可测函数

1 定义 可测函数:设是定义在可测集上的实函数,称为上的可测函数,如果满足: a])=b_{a})" class="mathcode" src="https://private.codecogs.com/gif.latex?%5Cforall%20a%5Cin%20R%2C%20%7Ca%7C%20%3C%20&plus;%5Cinfty%2C%5Cexists%20b_%7Ba%7D…

虚函数详解

文章目录 一、多态与重载1、多态的概念2、重载---编译期多态的体现3、虚函数---运行期多态的体现 二、虚函数实例三、虚函数的实现&#xff08;内存布局&#xff09;1、无继承情况2、单继承情况&#xff08;无虚函数覆盖&#xff09;3、单继承情况&#xff08;有虚函数覆盖&…

Java教程之NIO的基本用法

NIO的基本用法 NIO是New I/O的简称&#xff0c;与旧式基于流的I/O相对&#xff0c;从名字上来看&#xff0c;它表示新的一套I/O标准。它是从JDK1.4中被纳入到JDK中的。 与旧式的IO流相比&#xff0c;NIO是基于Block的&#xff0c;它以块为单位来处理数据&#xff0c;最为重要…

关于vp8,vp8与264比较总结

1 Other Codecs l MSN 使用的video codec “x-rtvc1”,09之前的版本使用的ML20.参考网址&#xff1a; http://www.amsn-project.net/forums/index.php?topic6612.0 l Yahoo messenger 使用GIPS的LSVX codec. l 这两个codecs技术保密性强&#xff0c;找不到有用的信息&#xff…

PCM(脉冲编码调制)、iLBC编解码、opus(声音编码格式)、VP8视频压缩格式、H.264数字视频压缩格式

目录 PCM&#xff08;脉冲编码调制&#xff09; 发展史 工作原理 iLBC编解码 基本介绍 技术优势 Opus&#xff08;声音编码格式&#xff09; 特性 播放 技术细节 VP8视频压缩格式 简介 突破创新 技术分析 H.264数字视频压缩格式 背景介绍 优势 特点 PCM&…

JavaCV音视频开发宝典:录制vp8和vp9编码的webm格式视频,以mp4转webm为例

《JavaCV音视频开发宝典》专栏目录导航 《JavaCV音视频开发宝典》专栏介绍和目录 ​ 前言 由于现代浏览器对webm格式的视频支持较好,如下图: 因此使用webm格式来作为主要的存储和回放视频格式。本章将使用mp4文件转webm为例,来讲一下JavaCV如何录制webm格式视频。 webm…

有关 VP8 的一些帧 Golden AltRef 的说明

---------------------------------------------------------------------------------------------------------------------- 一分钟快速搭建 rtmpd 服务器: https://blog.csdn.net/freeabc/article/details/102880984 软件下载地址: http://www.qiyicc.com/download/rtmpd…

主流编解码器(H.264 AVC, H.265 HEVC, VP8, VP9)比较

主流编解码器&#xff08;H.264 AVC, H.265 HEVC, VP8, VP9&#xff09;比较 本文转自&#xff1a;http://houh-1984.blog.163.com/blog/static/31127834201321995354105/ 概述 H.264(MPEG 4, class 10 )是目前嵌入式和移动设备中采用最多的视频编解码算法标准。目前超过50家…

即时通讯音视频开发(十七):视频编码H.264、VP8的前世今生

前言 目前从开发者的角度来说&#xff0c;音视频编码选H.264还是VP8几乎没有悬念&#xff08;个人认为这当然是H.264了&#xff09;。本文重在为读者从技术角度讲解H.264和VP8的发展渊源以及现时所面临的问题&#xff0c;相信读完此文后&#xff0c;对于即时通讯&#xff08;IM…