C++中的模板template

news2024/10/7 18:16:30

两种模板形式:函数模板、类模板

  1. 函数模板:
    • 目的:使得函数的实现与类型无关
    • 格式:
      template <class 形参名, class 形参名, ...> 返回类型 函数名(参数列表){
      	函数体
      }
      
      其中,
      • template和class是关键字,class可用typename关键字代替(二者没区别)
      • 模板形参:<>中的参数叫模板形参,模板形参有三种:类型形参(由class或typename后接用户自定义形参名构成)、非类型形参(内置类型,如int)、模板形参。编译器由模板自动生成函数时,会用具体的类型名对模板中所有的类型参数进行替换,其他部分则原封不动保留。如下所示:
        #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 &)函数
            return 0;
        }
        

        非类型形参与普通函数参数的区别:前者是在编译时确定的,允许将常量值、枚举值、指针等类型作为模板参数传递,并参与模板的实例化和代码生成,从而避免运行时的开销。比如下面的代码,process<true>()process<false>()的判断完全在编译时完成,二者会生成两种不同的代码逻辑,减轻了运行时的开销;而普通参数是在运行时传递的,即它们的值只有在程序执行时才会确定 。前者可用于生成不同的代码实例,从而提高性能、避免运行时开销

        template<bool EnableOptimization>
        void process() {
            if constexpr (EnableOptimization) {
                // 在编译时确定是否启用优化
                std::cout << "Optimization enabled!" << std::endl;
            } else {
                std::cout << "Optimization disabled!" << std::endl;
            }
        }
        
    • 模板的实例化:编译器根据模板自动生成函数的过程叫模板的实例化,由模板实例化而得到的函数称为模板函数。
    • 另一种实例化方法:并非只能通过模板调用语句的实参来实例化模板中的类型参数,也可以使用下述明确指明的方式:
      #include <iostream>
      using namespace std;
      
      template <class T>
      T Inc(int n){
      	return n+1;
      }
      
      int main(){
      	cout << Inc<double>(4) / 2;  // 这里致命了实例化的模板函数原型应为:double Inc(double);
      	return 0;
      }
      
  2. 类模板(待续…)
    • 格式:
      template <class T> class A{
      public: 
      	T a;
      	T b;
      	T hy(T c, T &d);
      };
      

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2194662.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

图像转3D视差视频:DepthFlow、kling

1、DepthFlow 参看: https://github.com/BrokenSource/DepthFlow 通过深度图实现图像3d效果 安装 https://brokensrc.dev/get/pypi/#installing pip insatll depthflow shaderflow broken-source pianola spectronote turbopipe 使用 1、下载项目 git clone https://gith…

约数个数约数之和

好久没发文章了.......不过粉丝还是一个没少...... 今天来看两道超级恶心的数论题目&#xff01; No.1 约数个数 No.2 约数之和 先来看第一道&#xff1a;约数个数 题目描述 给定 n 个正整数 ai​,请你输出这些数的乘积的约数个数,答案对 10^97 取模 输入格式 第一行包含…

Python_文件处理

一个完整的程序一般都包括数据的存储和读取&#xff1b;我们在前面写的程序数据都没有进行实际的存储&#xff0c;因此python解释器执行完数据就消失了。实际开发中&#xff0c;我们经常需要从外部存储介质&#xff08;硬盘、光盘、U盘等&#xff09;读取数据&#xff0c;或者将…

微信小程序开发-目录结构介绍

文章目录 一&#xff0c;目录结构介绍1&#xff0c;主体文件2&#xff0c;页面文件3&#xff0c;修改页面渲染模式 二&#xff0c;新增页面1&#xff0c;右键“pages”-新建文件夹2&#xff0c;右键文件夹-新建page3&#xff0c;新建页面的快捷方式 四&#xff0c;基础库设置 一…

①EtherNet/IP转ModbusTCP, EtherCAT/Ethernet/IP/Profinet/ModbusTCP协议互转工业串口网关

EtherCAT/Ethernet/IP/Profinet/ModbusTCP协议互转工业串口网关https://item.taobao.com/item.htm?ftt&id822721028899 协议转换通信网关 EtherNet/IP 转 Modbus TCP GW型号系列 MS-GW25 概述 简介 MS-GW25 是 EtherNet/IP 和 Modbus TCP 协议转换网关&#xff0c;为…

C语言 | 第十一章 | static 日期函数 数学函数

P 100 变量作用域基本规则 2023/1/9 一、基本介绍 概念&#xff1a;所谓变量作用域&#xff08;Scope&#xff09;&#xff0c;就是指变量的有效范围。 函数内部声明/定义的局部变量&#xff0c;作用域仅限于函数内部。 #include<stdio.h> void sayHello() {char nam…

【C++】—— 继承(上)

【C】—— 继承&#xff08;上&#xff09; 1 继承的概念与定义1.1 继承的概念1.2 继承定义1.2.1 定义格式1.2.2 继承父类成员访问方式的变化 1.3 继承类模板 2 父类和子类对象赋值兼容转换3 继承中的作用域3.1 隐藏规则3.2 例题 4 子类的默认成员函数4.1 构造函数4.1.1 父类有…

稀缺是否意味着价值

省流版&#xff1a;物以稀为贵。 稀少并不等于需求。 更新为&#xff1a;物以希为贵。 有需求就意味着有价值。 不管是20&#xff1a;80中的20&#xff0c;还是10&#xff1a;90中的10&#xff0c;还是2&#xff1a;98中的2。 所以&#xff0c;这个模型里一定会出现1这类人&a…

MambaAD 实验部分讲解

4 实验 4.1 设置&#xff1a;数据集、指标和细节 数据集&#xff08;6个&#xff09; 1.MVTec-AD&#xff1a; 包含5种类型的纹理和10种类型的对象&#xff0c;总共5,354张高分辨率图像。 实验&#xff1a; 3,629张正常图像被指定为训练。 剩下的 1,725 张图像被保留用于测试…

AWS MySQL 升级(三)—— TAZ - 近0停机的小版本升级方案

与AWS交流了解到的新方案&#xff0c;没有实际试过&#xff0c;所以本篇主要是些原理 一、 TAZ的含义 TAZ实际上就是 3 AZ&#xff0c;扩展一些就是 Multi-AZ DB Cluster&#xff0c;即在3个可用区部署DB&#xff0c;具备两个只读备用实例。 二、 TAZ的主要用途 1. 近0停机的小…

C++之模版进阶篇

目录 前言 1.非类型模版参数 2.模版的特化 2.1概念 2.2函数模版特化 2.3 类模板特化 2.3.1 全特化和偏特化 2.3.2类模版特化应用实例 3.模版分离编译 3.1 什么是分离编译 3.2 模板的分离编译 3.3 解决方法 4. 模板总结 结束语 前言 在模版初阶我们学习了函数模版和类…

单细胞组学大模型(6)--- LangCell,医学/细胞文本知识增强模型效果

–https://arxiv.org/abs/2405.06708 代码开源&#xff1a;https://github.com/PharMolix/OpenBioMed LangCell: Language-Cell Pre-training for Cell Identity Understanding 留意更多内容&#xff0c;欢迎关注微信公众号&#xff1a;组学之心 研究团队和研究单位 聂再清…

Python画笔案例-077 绘制 颜色饱和度测试

1、绘制 颜色饱和度测试 通过 python 的turtle 库绘制 颜色饱和度测试,如下图: 2、实现代码 绘制 颜色饱和度测试,以下为实现代码: """饱和度渐变示例,本程序需要coloradd模块支持,请在cmd窗口,即命令提示符下输入pip install coloradd进行安装。本程序演…

如何彻底掌握 JavaScript 设计模式 23 大核心模式助你提升编程水平

如何彻底掌握 JavaScript 设计模式 23 大核心模式助你提升编程水平 设计模式是解决特定问题的常用解决方案&#xff0c;它们可以帮助开发者编写更清晰、可维护、可扩展的代码。在 JavaScript 中&#xff0c;常见的设计模式可以分为三大类&#xff1a;创建型模式、结构型模式 和…

javaweb - 请求响应02

数组集合参数 数组参数&#xff1a;请求参数名与形参数组名称相同且请求参数为多个&#xff0c;定义数组类型形参即可接收参数。 RequestMapping("/arrayParam")public String arrayParam(String[] hobby) {for (String s : hobby) {System.out.println(s);}retu…

xtu oj 神经网络

回顾 Dedicated to you. AB III问题 H: 三角数问题 G: 3个数等式 数组下标查询&#xff0c;降低时间复杂度1405 问题 E: 世界杯xtu 数码串 题目 某神经网络模型是如下 1.一共有m层&#xff0c;每层都有几个神经元&#xff0c;从上到下编号为1到n。 2.第 i 层的神经元只有第 i …

基于Python的自然语言处理系列(26):Get to the Point Summarization

在本篇文章中,我们将实现经典的"Get to the Point"模型,该模型最初发表于 Get to the Point: Summarization with Pointer-Generator Networks。这是当时最著名的摘要生成模型之一,至今仍有很多人使用其Pointer-Generator架构作为他们模型的一部分。 1. 模型简介…

数据库管理-第248期 23ai:全球分布式数据库-分片数据分布方法(20241006)

数据库管理248期 2024-10-06 数据库管理-第248期 23ai&#xff1a;全球分布式数据库-分片数据分布方法&#xff08;20241006&#xff09;1 系统管理分片2 用户定义分片2.1 分片空间2.2 在用户定义分片配置中添加分片空间2.3 为用户定义分片创建表空间2.4 用户定义分片创建分片表…

AI大模型应用开发实战-AI时代应用开发破局!

后端应用级开发者该如何拥抱 AI GC&#xff1f;就是在这样的一个大的浪潮下&#xff0c;我们的传统的应用级开发者。我们该如何选择职业或者是如何去快速转型&#xff0c;跟上这样的一个行业的一个浪潮? 0 AI金字塔模型 越往上它的整个难度就是职业机会也好&#xff0c;或者说…

毒蘑菇检测数据集 9200张 14类毒蘑菇 带标注 voc yolo

毒蘑菇检测数据集 9200张 14类毒蘑菇 带标注 voc yolo 分类名: (图片张数,标注个数) Amanita citrina: (700, 816) Gyromitra infula: (842, 1102) Hygrophoropsis aurantiaca: (766, 1578) Imleria badia: (794, 1027) Lactarius turpis: (728, 891) Boletus reticulatus: (67…