C++使用函数模板

C++使用函数模板

大家好,又见面了,我是全栈君,今天给大家准备了Idea注册码。

函数模板:

函数模板是蓝图或处方功能,编译器使用其发电功能系列中的新成员。

第一次使用时,新的功能是创建。从功能模板生成的函数的实例称为模板或模板的实例。函数模板的开始是keywordtemplate,表示这是一个模板。

其后是一对尖括号,它包括了參数列表。

在使用从模板中生成的函数之前,必须确保把声明(即原型)或模板的定义放在源文件里。模板的实例化仅仅生成一次。

假设兴许的函数调用须要同一个实例,就会调用已经创建好的实例,即使同一个实例在不同的源文件里生成,程序也仅会包括该实例定义的一个副本。

使用时须要注意两个问题:
第一,函数模板本身不做不论什么工作,它是编译器用于从函数调用中创建函数定义的处方或蓝图。

第二。全部工作都在编译和链接过程中完毕。

编译器使用模板生成函数定义的源码。再编译这些代码。链接程序的作用是仅把函数的一个实例链接到可运行模块上,即使几个不同的源文件调用同一个实例。也仅仅链接一个实例。在运行程序时,源码中是否存在模板根本不重要。

 

显示指定模板參数:

在调用函数时,能够显示指定模板的參数,以控制使用哪个版本号的函数。编译器不再判断用于替换T的类型,仅仅是接受指定的版本号。

在下列情形下,比較实用:

1、函数调用不是非常确切,编译失败。

此时能够使用该技巧帮助编译器去除不确定性。

2、在一些情况下,编译器不能判断出模板參数,因此无法选择要使用哪个版本号的函数。

3、为了避免有太多的函数版本号(从而避免过多占用内存)。能够强迫函数调用使用某个版本号的函数。

 

模板的说明:

对于某个參数值(在有多个參数的模板中,就是一组參数值)。模板的说明定义了它不同于标准模板的动作。模板说明的定义必须放在原语句的声明或定义之后。

假设把说明放在前面,程序就不会编译。

说明的定义以keywordtemplate开头,但要省略參数。所以原声明中模板參数外部的尖括号就是空的。必须定义说明的參数值。并且必须放在模板函数后面的尖括号里。以下看演示样例:

演示样例:

#include <iostream>
using std::cout;
using std::endl;
//模板声明
template<class T> T larger(T a,T b);
//模板说明声明
template<> long* larger<long*>(long* a,long* b);
int main(int argc,char* argv[]){

	cout<<"Larger of 1.5 and 2.5 is "<<larger(1.5,2.5)<<endl;
	
	int a_int=35;
	int b_int=45;
	cout<<"Larger of "<<a_int<<" and "<<b_int<<" is "
		<<larger(a_int,b_int)<<endl;
	
	long a_long=9;
	long b_long=8;
	cout<<"Larger of "<<a_long<<" and "<<b_long<<" is "
		<<larger(a_long,b_long)<<endl;
	
	//显示指定模板參数
	cout<<"Larger of "<<a_int<<" and "<<b_int<<" is "
		<<larger<long>(a_int,b_int)<<endl;
	
	//调用模板说明
	cout<<"Larger of "<<a_long<<" and "<<b_long<<" is "
		<<*larger(&a_long,&b_long)<<endl;
	return 0;	
} 
//模板定义
template <class T> T larger(T a,T b){
	cout <<"standard version"<<endl;
	return a>b?

a:b;}//模板描述定义template <> long* larger<long*>(long* a,long* b){ cout <<"specialized version"<<endl; return *a>*b?a:b;}

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/116720.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • 指针基础知识笔记

    指针基础知识笔记指针式C语言中的重要概念,也是C语言的一个重要特色,C的精华所在吧。1.指针-内存地址;2.指针变量:定义为,存放指向存储什么数据类型的地址的变量;它的值就是地址; 定义指针变量: 类型名*指针变量名;//类型名就是指向地址上的数据的类型; 例如: char*pa; int*pb;(注意的是):避免访问未初始化的指针; 3.取地址运算符:&获取某个变量的地址;//初始化指针; 例如:(chara;intb); char

  • 解决Typora官方版本图片显示bug

    解决Typora官方版本图片显示bug问题:win10,官网下载的typorawinx64版,就是不显示图片,并不是路径问题!不是偏好设置问题!就是图片无法加载!,网上搜了一下发现很多小伙伴也遇到了这个问题;个人觉得这应该就是0.10版本的bug解决:换了一下0.9版本的,完美解决希望对你有所帮助!0.9版本的安装包pan链接:https://pan.baidu.com/s/1InBp08xV1DcOyiV9Ic65qQ提取码:1234复制这段内容后打开百度网盘手机App,操作更方便哦–来自百度网盘超级会员V3的分享…

  • FOC入门教程_晚上开飞机前面有灯吗

    FOC入门教程_晚上开飞机前面有灯吗深入浅出FOC(FieldOrientedControl)前言:为什么要学习FOC?1.电机控制是自动化控制领域重要一环。2.目前直流无刷电机应用越来越广泛,如无人机、机械臂、云台、仿生机器人等等。3.电机控制工程师薪水较高。需要什么基础?1.C语言,指针,结构体,编程规范。2.STM32外设使用。3.原理图阅读。4.芯片手册阅读。5.数序坐标系知识为什么要出本教程?1.直流无刷电机应用越来越广泛,网上资料比较散落,因此想要出一篇系统性的教程,从头到尾,深入浅出,帮助初学者快速

    2022年10月24日
  • 如何设置,使IntelliJ IDEA智能提示忽略大小写

    如何设置,使IntelliJ IDEA智能提示忽略大小写

  • BZOJ2440(全然平方数)二分+莫比乌斯容斥

    BZOJ2440(全然平方数)二分+莫比乌斯容斥

  • OpenCV-Python教程(8、Canny边缘检测)

    OpenCV-Python教程(8、Canny边缘检测)本篇文章介绍如何用OpenCV-Python来使用Canny算子。提示:转载请详细注明原作者及出处,谢谢!本文介绍使用OpenCV-Python实现基本的滤波处理本文不介详细的理论知识,读者可从其他资料中获取相应的背景知识。笔者推荐清华大学出版社的《图像处理与计算机视觉算法及应用(第2版)》。原型OpenCV-Python中Canny函数的原型为:edge

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号