c++模板

2023-05-16

1、函数模板

//普通函数
void myPrint(int a, int b)
{
	cout << "普通函数" << endl;
	cout << "a = " << a << ", b = " << b << endl;
}

/*
模板函数:可以写成下面两种方式
template<typename	T>	
template<class	T>	
*/
template<typename T>//只对下面的第一个函数有用
void myPrint(T a, T b)
{
	cout << "模板函数" << endl;
	cout << "a = " << a << ", b = " << b << endl;
}

int main(void)
{
	int aInt = 10;
	int bInt = 20;

	char aChar = 'a';
	char bChar = 'b';
	
	myPrint(aInt, bInt);//调用普通函数

	cout << " ----- " << endl;
	myPrint(aChar, bChar);//调用模板函数

	cout << " ------  " << endl;
	myPrint(aChar, bInt);//调用普通函数

	cout << " ------ " << endl;
	myPrint<int>(aInt, bChar);//调用模板函数
	
	return 0;
}

结论:
1.1 当函数模板和普通函数都符合调用时,优先选择普通函数。
1.2 如果函数模板产生更好的匹配 使用函数模板。
1.3 普通函数会进行隐士的数据类型转换, 函数模板不提供隐式的数据类型转换 必须是严格的匹配。
1.4 当普通函数需要隐式转换的时候,如果模板函数能够匹配,那么就优先使用模板函数。
1.5 若显示使用函数模板,则使用<> 类型列表。
1.6 编译器并不是把函数模板处理成能够处理任意类类型的函数,而是通过具体类型产生不同的函数,
编译器会对函数模板进行两次编译,在声明的地方对模板代码本身进行编译;在调用的地方对参数替换后的代码进行编译。


2、类模板

template<class T>
class A
{
public:
	A(T a)
	{
		this->a = a;
	}

	void printA()
	{
		cout << "a = " << a << endl;
	}
private:
	T a;
};


//继承模板类, 直接继承已经实例化的模板类
//这么继承完的B类, B类此时是一个普通类。
class B :public A<int>
{
public:
	B(int a, int b) : A<int>(a)
	{
		this->b = b;
	}

	void printB()
	{
		cout << "b = " << b << endl;
	}
private:
	int b;
};


//C类继承的是一个模板类,没有实例化,此时C类依然是一个模板类,
//编译器在对c类处理依然需要二次编译
template <class T>
class C :public A<T>
{
public:
	C(T a, T c) : A(a)
	{
		this->c = c;
	}

	void printC()
	{
		cout << "c = " << c << endl;
	}
private:
	T c;
};


//普通函数
void func(A<int> & a)
{
	a.printA();
}

//模板函数
template <class T>
void func2(A<T> &a)
{
	a.printA();
}


int main(void)
{
	A<int> a(10);//在定义一个对象的时候,要明确此类所泛化的具体类型

	a.printA();

	func(a);
	func2<int>(a);


	A<double> a2(30.0);
	a2.printA();

	cout << " ------  " << endl;
	B b(100, 200);

	b.printB();


	cout << "-------- " << endl;
	C<int>  c(1000, 2000); //C类是一个模板类

	c.printC();

	

	return 0;
}

结论:
2.1 模板类不要轻易使用友元函数。
2.2 实现模板方法建议在同一个文件.h中完成,这里引入hpp文件,意思是.cpp和.h的结合。
2.3 模板类中的static成员:同种数据类型的static成员是共享的。
假设 a1,a2,a3    是属于A<int>家族的他们共享A<int>::s_value;                                                                                                         b1,    b2,    b3    是属于A<char>家族的他们共享A<char>::s_value;

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

c++模板 的相关文章

  • [Holo_wo]-网络编程之eventfd使用说明

    span class token macro property span class token directive hash span span class token directive keyword include span spa
  • [Holo_wo]-如何阅读递归代码,对递归代码结构分析

    因为做算法题的时候经常碰到递归的方法 xff0c 而每次理解递归代码的层次结构都很费脑筋 xff0c 所以我尝试着总结分析了一下递归代码的结构 xff0c 如果有误还望大家指明 类型 函数名 xff08 参数 xff09 跳出递归的条件 相
  • 松灵机器人 SCOUT的ROS代码架构---CAN通信

    松灵机器人感觉可能还是比较小众吧 明明官方的github xff0c 但是star之类的完全没有关注度 xff0c 也没有issue 这个SCOUT ROS主要是解决SCOUT底盘与上位机的通信方式 xff0c 截止目前 xff0c 已经开
  • VINS-Mono 代码解析四、闭环检测和优化 (偏理论)

    一 理论部分 1 1 怎么知道发生了闭环 上图中 蓝线 为正常的闭环优化流程 即通过后端的非线性优化来更新滑窗内所有相机的位姿 紫线为闭环检测模块 当后端优化完成后 会将滑窗内的次新帧进行闭环检测 即首先提取新角点并进行描述 然后与数据库进
  • 八、IMU器件温度漂移补偿

    感谢大神分享 xff1a 多传感器融合定位理论基础 xff08 九 xff09 xff1a 凸优化基础 知乎 1 概述 温补的本质是系统辨识 之前我们在介绍标定的时候 xff0c 也说过一句类似的话 标定的本质是参数辨识 这两者之间相似又不
  • Kalibr 安装+制作采集的图片和IMU数据生成 .bag 文件 (坑最全,解决方法最简单,最详细哈哈)

    测试的数据集 标定板下载页面 https github com ethz asl kalibr wiki downloads 官方下载和安装教程 https github com ethz asl kalibr wiki installat
  • GPS从入门到放弃(三)、GPS坐标系

    可以参考下面的连接理解 xff1a 常用导航坐标系 及 转换关系 xff08 理论 43 程序 xff09 努力努力努力 CSDN博客 定位就需要坐标 xff0c 坐标当然是相对坐标系而言的 xff0c 我们描述一个物体的位置 xff0c
  • RealSenseD435i (四):运行 VINS-mono代码

    一 必读博客 nbsp https blog csdn net hltt3838 article details 120691764 nbsp nbsp nbsp 一 https blog csdn net hltt3838 article
  • 多种视觉SLAM方案对比

    在SLAM研究中 xff0c 我们通常需要在各数据集上测试各个方案的性能情况 如下主要对表1中6个视觉SLAM方案进行相关测试 xff0c 测试其在不同场景 要求下的精度和鲁棒性 xff0c 并给出最终方案选型 由于时间 场地等原因 xff
  • SDL概念介绍

    下面是我对网上知识的一些总结 xff1a 1 SDL是一套开放源代码的跨平台多媒体开发库 xff0c 使用C语言写成 2 SDL提供了数种控制图像 声音 输入输出的函数 xff0c 可以跨平台进行软件开发 3 目前SDL多用于开发游戏 模拟
  • Python turtle库 写“生日快乐”

    1 首先要CTRL 43 R然后cmd进入命令行 xff0c 输入pip install turtle安装第三方库 2 打开python IDE xff0c 如下图 xff0c 点击 File 34 选择 New File 34 3 复制代
  • 简单回路与初级回路(圈)区别

    1 回路 xff1a 起点终点相同 简单通路 xff1a 起点到终点所经过的边不同 简单回路 xff1a 起点到终点所经过的边不同 43 回路 初级通路 xff1a 起点到终点所经过的顶点各异 43 简单通路 初级回路 圈 xff1a 起点
  • wechaty搭建微信机器人——超详细版

    文章目录 前言一 wechaty是什么 xff1f 二 准备1 安装 Node js xff08 需要10 0版本以上 xff09 2 安装Wechaty 总结 前言 提示 xff1a 这里可以添加本文要记录的大概内容 xff1a 例如 x
  • 离散 排斥或与相容或的区别

    1 相同之处 xff1a 就是 或 2 不同之处 xff1a 一个排斥 xff0c 一个相容 p xff1a 2是偶数 q xff1a 2是奇数 xff0c 这种情况下是排斥或 xff0c 也即一个命题成立 xff0c 则其他命题不成立 p
  • Latex中ACM-Reference-Format顺序与论文引用顺序不一致solution

    在第一次编译的时候 xff0c 先使用 bibliographystyle unsrt 而非模板的 bibliographystyle ACM Reference Format 的进行按顺序的编译 在之后的编译中 xff0c 使用 bibl
  • 正则表达式快速入门

    目录 1 正则表达式是什么 xff0c 有什么作用2 定位符例子2 1想要搜索以 001 开头的文件2 2想要搜索以 ab 结尾的文件2 3搜索单词开头为 zh 34 的文件2 4搜索单词结尾为 zh 34 的文件2 5搜索单词中间为 zh
  • JAVASE基础(一)

    这里写目录标题 一 javaSE基础1 jdk文档2 代码量统计工具3 文档注释4 反编译工具5 JDK JRE JVM xff08 java虚拟环境 xff09 61 61 6 变量命名规则 61 61 7 变量的作用域8 数据类型9 进
  • JAVASE基础(二)

    这里写目录标题 JAVASE基础11 科学计数法12 编码和字符集12 编译格式问题13 类型转换类型级别自动类型转换强制类型转换特殊情况 14 final修饰符a 修饰变量b 修饰方法c 修饰类 15 scanner使用16 两个数交换引
  • 关于gcc编译 -I -L -l的使用

    gcc o hello hello c I home hello include L home hello lib lworld 参数说明 xff1a I home hello include表示将 home hello include 目
  • Matlab彩色图像的rgb分量获取,彩色通道互换

    1 原图像 2 matlab代码 xff0c 将图像的绿色和蓝色通道进行互换 A 61 imread 39 花朵 jpg 39 h w d 61 size A R 61 A 1 获取红色分量 G 61 A 2 获取绿色分量 B 61 A 3

随机推荐

  • 使用Xavier读取RealSense D435i的踩坑经历

    由于项目需要 xff0c 最近开始研究通过Xavier运行VINS的方法 xff0c 使用的传感器是Intel的RealSense xff0c 但是Xavier对RealSense的支持却不怎么好 xff0c 下面介绍一下躲坑方法 xff0
  • 宏函数详解

    宏函数 xff1a STL模板 实现函数的复用性 函数 xff1a 可以传递参数 但是不能将类型作为参数传递 例如 xff1a 一个开辟内存的函数 xff1a define Malloc type size type malloc size
  • UBUNTU将新路径添加到ROS_PACKAGE_PATH中。

    first 查看路径 chen 64 chen HP echo ROS PACKAGE PATH opt ros indigo share opt ros indigo stacks 添加 chen 64 chen HP echo 34 e
  • Visual Studio实现多核并行编译

    Visual Studio 大工程项目的编译时间较长 xff0c 可以利用多核CPU的优势 xff0c 实现并行编译 xff0c 设置并行编译方法示例如下 xff1a 1 在 ClassView 中选取某项目的 Properties xff
  • 五参数超声波风速风向传感器

    五参数超声波风速风向传感器介绍风速风向基于超声波原理研发的风速风向测量仪器 xff0c 利用发送的声波脉冲 xff0c 测量接收端的时间或频率 xff08 多普勒变换 xff09 差别来计算风速和风向 该传感器可以同时测量风速 xff0c
  • Postman 的使用教程(详细)

    Postman 使用教程 1 是什么 Postman 是一个接口测试工具软件 xff0c 可以帮助开发人员管理测试接口 官网 xff1a https www getpostman com 2 安装 建议通过官网下载安装 xff0c 不要去那
  • 《Qt 5.9 C++开发指南》第3章 Qt类库概述【详细摘要】

    Qt是一个用标准C 43 43 编写的跨平台开发类库 xff0c 它对标准C 43 43 进行了扩展 xff0c 引入了元对象系统 信号与槽 属性等特性 xff0c 使得应用程序开发变得更高效 本章介绍Qt的这些核心特点 xff0c 对于理
  • c++中引用相关概念总结

    1 先从下面这两段代码的运行结果开始看起 xff1a int a 61 10 在内存上开辟4个字节 xff0c a就代表这个4个字节内存 int p 61 amp a 让一个指针 指向这个4个字节的空间 p 61 20 cout lt lt
  • STM32串口接收中断——基于HAL库

    写在前面 最近需要使用一款STM32L4系列的芯片进行开发 xff0c 需要学习使用HAL库 在进行串口中断使用的时候遇到了一些小麻烦 xff0c 写下解决方案供大家参考 1 UART相关的头文件引用错误 由于本人直接使用MDK进行开发 x
  • 相机标定-标定板pdf生成网站

    推荐一个可以自动生成相机标定的标定板文件的网站 xff1a https calib io pages camera calibration pattern generator
  • 什么是卫星通信中的星基增强系统(SBAS)

    背景 最新的通用航空标准中要求航空电子设备接收器应配备抗干扰能力 xff0c 同时也能够识别和处理故意干扰 xff0c 如欺骗 这项新规定代表了民用航空对全球导航卫星系统信号干扰引起的风险的认识提升 xff0c 而这也是军用航空一直面临的问
  • 你了解RTK技术吗?—— 揭秘GNSS中的定位技术

    上期文章中我们一起探讨了GNSS仿真及其对测试验证的重要意义 xff0c 今天我们将一起走进GNSS中的定位技术 RTK技术 什么是RTK技术 xff1f 传统RTK技术与网络RTK技术又有什么区别呢 xff1f 随着GNSS系统的迅速发展
  • STM32 Keil下编程实现LED灯点亮与闪烁

    提示 xff1a 文章写完后 xff0c 目录可以自动生成 xff0c 如何生成可参考右边的帮助文档 文章目录 前言一 原理图1 STM32F103C8T62 LED23 LED3 二 Keil代码1 Led h2 Led c3 main
  • STM32Keil下编程实现蜂鸣器长鸣

    提示 xff1a 文章写完后 xff0c 目录可以自动生成 xff0c 如何生成可参考右边的帮助文档 文章目录 前言一 原理图1 STM32F103C8T62 BELL蜂鸣器 二 Keil代码1 Beep c2 Beep h3 main c
  • STM32 NRF24L01实现无线传输

    提示 xff1a 文章写完后 xff0c 目录可以自动生成 xff0c 如何生成可参考右边的帮助文档 文章目录 前言一 原理图1 STM32F103C8T62 NRF24L01 二 Keil代码1 SPI NRF2401 C2 SPI NR
  • C语言编程的步骤

    C是一种编译性语言 如果你以前从来没有接触过任何的编程语言 xff0c 那么你则需要学习一下一个拆分的逻辑思维 当我们想要写一个项目或者软件的时候 xff0c 我们需要把这个整体拆分为 xff17 个步骤 xff0c 这样也会让你的思路看起
  • 单片机的四种烧写方式

    JTAG SWD ISP SWIM详解单片机的四种烧写方式 单片机是一种可编程控制器 xff0c 搭好硬件电路后 xff0c 可以利用程序实现很多非常复杂的逻辑功能 xff0c 与纯硬件电路相比 xff0c 简化了硬件外围的设计 方便了逻辑
  • STM32新建keil工程具体步骤(详细)

    1 新建本地工程文件夹 们在本地电脑上新建一个 工程模板 文件夹 xff0c 在它之下再新建 6 个文件夹 xff1a 2 添加库文件到相应文件夹 把 ST 标准库必要的文件复制到工程模版对应文件夹的目录下 3 KEIL5新建工程 打开 K
  • STM32固件库实现按键控制

    文章目录 前言一 原理图二 软件设计三 代码1 按键引脚宏定义2 按键 GPIO 初始化函数3 检测按键的状态4 主函数 四 下载验证五 收获1 程序如何换行2 异或 前言 使用固件库实现按键控制LED 提示 xff1a 以下是本篇文章正文
  • c++模板

    1 函数模板 普通函数 void myPrint int a int b cout lt lt 34 普通函数 34 lt lt endl cout lt lt 34 a 61 34 lt lt a lt lt 34 b 61 34 lt