C++模板介绍

定义

C++模板是一种编程技术,它允许程序员在编译时生成具有特定类型的函数或类,而无需在运行时进行类型检查。模板是一种泛型编程的方式,它使得程序员可以编写可适用于多种数据类型的代码,提高了代码的重用性和灵活性。

C++模板可以分为函数模板和类模板两种类型。

  1. 函数模板定义了一种通用的函数,可以接受多种类型的参数,并根据不同的类型生成相应的函数。
  2. 类模板则是定义了一种通用的类,可以包含多种类型的成员变量和成员函数。
函数模板的定义
template <typename T>
void functionName(T parameterName) {// 函数体
}

其中,typename T表示模板参数,可以是任何数据类型。functionName是函数名,parameterName是参数名。在函数体中,可以使用T表示参数的类型。

类模板的定义
template <typename T>
class className {
public:T data;void functionName() {// 函数体}
};

其中,typename T表示模板参数,可以是任何数据类型。className是类名,data是类中的成员变量,functionName()是类中的成员函数。在类中的函数体中,可以使用T表示数据类型。

使用注意

使用模板时,编译器会根据实际类型生成相应的函数或类。例如,如果使用int类型的参数调用函数模板,编译器会生成一个接受int类型参数的函数。如果使用int类型的对象创建类模板的实例,编译器会生成一个包含int类型成员变量和成员函数的类。

需要注意的是,在使用类模板时,如果在类中的函数使用了模板参数,那么这个函数必须在类外定义。否则,编译器会报错。

应用举例

#include <iostream>
#include <vector>// 函数模板
template <typename T>
void printArray(const std::vector<T>& arr) {for (const auto& element : arr) {std::cout << element << " ";}std::cout << std::endl;
}// 类模板
template <typename T>
class Box {
public:Box(T value) : value_(value) {}void print() const { std::cout << value_ << std::endl; }
private:T value_;
};int main() {// 使用int类型调用函数模板std::vector<int> intArray = {1, 2, 3, 4, 5};printArray(intArray);// 使用double类型调用函数模板std::vector<double> doubleArray = {1.1, 2.2, 3.3, 4.4, 5.5};printArray(doubleArray);// 使用int类型创建类模板实例Box<int> intBox(10);intBox.print();// 使用double类型创建类模板实例Box<double> doubleBox(10.5);doubleBox.print();return 0;
}

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

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

相关文章

Spine深入学习———— 渲染

数据有了之后&#xff0c;就开始渲染 渲染相关 绘制顺序 骨架的绘制顺序就是一个插槽列表&#xff0c;在插槽列表中上方的附件在下方之上绘制&#xff0c;绘制顺序可以在层级树中的骨架下查看。 基础流程 渲染实现 以下按照cocos2dx的实现来 &#xff08;cocos2dx 3.7 spin…

【云平台】STM32微信小程序阿里云平台汇总——持续更新

【云平台】STM32微信小程序阿里云平台汇总——持续更新 文章目录 前言总结 前言 提示&#xff1a;以下是本篇文章正文内容&#xff0c;下面案例可供参考 【云平台】STM32微信小程序阿里云平台学习板 【云平台】小白从零开始&#xff1a;小程序阿里云平台控制STM32&#xff08…

1980-2022年世界各国专利、商标申请数据/世界各国知识产权专利申请数据

1980-2022年世界各国专利、商标申请数据/世界各国知识产权专利申请数据 1、时间&#xff1a;1980-2022年 2、来源&#xff1a;WIPO数据库 3、范围&#xff1a;世界各国&#xff08;180多个国家&#xff09; 4、指标&#xff1a;国家名称、年份、代码、类型、专利申请总量、…

Nginx简介与安装

Nginx简介 Nginx是一款轻量级的Web服务器/反向代理服务器和电子邮件(IMAP/POP3)代理服务器。以下是关于Nginx的简要介绍: 轻量级:Nginx以其低内存消耗而闻名。它能够处理大量并发连接,而不占用过多的系统资源。 高并发能力:Nginx在处理并发请求方面表现出色,具备优秀的…

GPU中的半格效应(half-pixel)

最近在阅读《GPGPU编程技术从GLSL、CUDA到OpenCL》时&#xff0c;章节3.4.3 卷积核中讲到了半格效应&#xff0c;该书中的英文标注为&#xff1a;0.5 effect&#xff0c;也有被称为&#xff1a;half pixel offset等。 联想到我之前的GPU计算、渲染时的代码&#xff0c;在做画质…

TUP通信

一&#xff0c;概括 二&#xff0c;常用方法 三&#xff0c; 实现步骤&#xff08;一发一收&#xff09; 四&#xff0c;案例&#xff08;一接一收&#xff09; &#xff08;1&#xff09;&#xff0c;客户端 &#xff08;2&#xff09;&#xff0c;服务端 &#xff08;3&…

歌手荆涛作品《父与子》:一首深情演绎父子情感的歌曲

在华语乐坛中&#xff0c;有很多歌曲以亲情为主题&#xff0c;其中歌手荆涛演唱的《父与子》就是其中的代表作之一。这首歌以朴实的歌词和深情的演唱&#xff0c;打动了无数听众的心灵&#xff0c;让人感受到了亲情之间的温暖和牵绊。 《父与子》这首歌以父子为主题&#xff0c…

【C++】类型转换 ④ ( 子类 和 父类 之间的类型转换 - 动态类型转换 dynamic_cast )

文章目录 一、子类 和 父类 之间的类型转换 - 动态类型转换 dynamic_cast1、构造父类和子类2、子类 和 父类 之间的类型转换 - 隐式类型转换3、子类 和 父类 之间的类型转换 - 静态类型转换 static_cast4、子类 和 父类 之间的类型转换 - 重新解释类型转换 reinterpret_cast5、…

【Java Spring】SpringBoot Bean详解

文章目录 1、Bean方法注解简介2、Bean注解重命名3、对象装配&#xff08;获取Bean对象&#xff09;3.1 对象装配之属性注入3.2 对象装配之Set 注入3.3 对象装配之构造方法注入 4、Resource VS Autowired5、Bean对象的作用域5.1 验证Bean对象的默认作用域5.2 Bean对象的六大作用…

论文解读:《数据增强:通过强化学习引导的条件生成进行文本数据扩充》

Title:<Data Boost: Text Data Augmentation Through Reinforcement Learning Guided Conditional Generation> 期刊&#xff1a;EMNLP &#xff08;顶级国际会议&#xff09; 作者 Ruibo Liu; Guangxuan Xu; Chenyan Jia; Weicheng Ma; Lili Wang; et al 出版日期 20…

基于Springboot的墙绘产品展示交易平台(有报告),Javaee项目,springboot项目。

演示视频&#xff1a; 基于Springboot的墙绘产品展示交易平台&#xff08;有报告&#xff09;&#xff0c;Javaee项目&#xff0c;springboot项目。 项目介绍&#xff1a; 采用M&#xff08;model&#xff09;V&#xff08;view&#xff09;C&#xff08;controller&#xff0…

嵌入式设备摄像头基础知识

工作原理 摄像头的工作原理是&#xff0c;当光线通过镜头聚焦到图像传感器上时&#xff0c;传感器会将光信号转换为电信号&#xff0c;并将其传输给处理器进行处理。处理器通过算法对图像信号进行增强、去噪、压缩等操作&#xff0c;并将其转换为数字信号输出给计算机或其他设…

手势监听类GestureDetector Listener源码解析

手势监听类GestureDetector 前言一、GestureDetector是什么&#xff1f;二、Listener源码解析1.OnGestureListener2.OnDoubleTapListener3.OnContextClickListener4.SimpleOnGestureListener 总结 前言 在写自定义view的时候&#xff0c;涉及到了手势监听这块的知识&#xff0…

Leetcode 2948. Make Lexicographically Smallest Array by Swapping Elements

Leetcode 2948. Make Lexicographically Smallest Array by Swapping Elements 1. 解题思路2. 代码实现 题目链接&#xff1a;2948. Make Lexicographically Smallest Array by Swapping Elements 1. 解题思路 这一题其实思路上就是分组排序&#xff0c;显然&#xff0c;对于…

C语言中#ifndef的头文件保护用法和宏定义用法

文章目录 头文件保护宏定义 #ifndef MY_HEADER_H #define MY_HEADER_H// 这里放置头文件的内容#endif // MY_HEADER_H#ifndef _error#define _error (-1) #endif这两个代码块分别用于不同的目的。 头文件保护 #ifndef MY_HEADER_H #define MY_HEADER_H// 这里放置头文件的内…

FLV 文件格式分析

前言 flv 是 flash video 的缩写&#xff0c;是 Adobe Flash payler 支持的一种流媒体播放格式。flv 是一种层级格式&#xff0c;除了一个 flv header 外&#xff0c;剩下全是由 一个个 tag 组成。tag 是由 tag 头和 tag 数据组成。tag 类型分为音频、视频、脚本&#xff0c;一…

WEB渗透—反序列化(七)

Web渗透—反序列化 课程学习分享&#xff08;课程非本人制作&#xff0c;仅提供学习分享&#xff09; 靶场下载地址&#xff1a;GitHub - mcc0624/php_ser_Class: php反序列化靶场课程&#xff0c;基于课程制作的靶场 课程地址&#xff1a;PHP反序列化漏洞学习_哔哩哔_…

交换机的VRRP主备配置例子

拓朴如下&#xff1a; 主要配置如下&#xff1a; [S1] vlan batch 10 20 # interface Vlanif10ip address 10.1.1.1 255.255.255.0vrrp vrid 1 virtual-ip 10.1.1.254vrrp vrid 1 priority 200vrrp vrid 1 preempt-mode timer delay 20 # interface Vlanif20ip address 13.1.1…

2-Python与设计模式--工厂类相关模式

2-Python与设计模式–工厂类相关模式 一、快餐点餐系统 想必大家一定见过类似于麦当劳自助点餐台一类的点餐系统吧。在一个大的触摸显示屏上&#xff0c; 有三类可以选择的上餐品&#xff1a;汉堡等主餐、小食、饮料。当我们选择好自己需要的食物&#xff0c;支付完成后&…

@RequestMapping,@GetMapping,@PostMapping 的区别(详解)

HTTP请求方法 HTTP请求方法一共有9种&#xff0c;为 GET、POST、HEAD、OPTIONS、PUT、PATCH、DELETE、TRACE、CONNECT。 GET 【获取资源】本质就是发送一个请求来取得服务器上的某一资源。资源通过一组HTTP头和呈现数据&#xff08;如HTML文本&#xff0c;或者图片或者视频等…