C++模板重载

2023-11-12

C++模板重载

产生背景:需要多个对不同类型使用同一种算法函数时可以使用模板,但是并非所有的类型都使用同一种算法,为了解决这个问题,产生了模板重载。
Tips:
1.如同函数的重载一样,模板重载函数的特征标必须不同
2.并非所有的模板参数都必须是模板参数类型

显示具体化(explicit specialization):提供一个具体化函数定义
基于(ISO/ANSI C++标准)
C++98标准选择的方法:
1.对于给定的函数名,可以有非模板函数、模板函数和显示具体化模板函数以及它们的重载版本
2.显示具体化的原型和定义应template<>打头,并通过名称来制定类型
3.具体化优先于常规模板,而非模板函数优先于具体化和常规模板

结合代码示例理解

#include <iostream>
using namespace std;

template<typename T>
void Swap(T &a,T &b);

struct job{
	char name[40];
	double salary;
	int floor;
};

template<> void Swap<job>(job &j1,job &j2);
void Show(job &j);

int main()
{
	cout.precision(2);
	cout.setf(ios::fixed ,ios::floatfield);
	int i = 10,j = 20;
	cout << "i, j =" << i << " , " << j << endl;
	cout << "Using complier-generated int swapper:\n";
	Swap(i,j);
	cout << "Now i, j =" << i << " , " << j << endl;
	job sue = {"Susan Yaffee",73000.60,7};
	job sidney = {"Sidney Taffee",78060.72,9};
	cout << "Before job swapping:\n";
	Show(sue);
	Show(sidney);
	Swap(sue,sidney);
	cout << "After job swapping:\n";
	Show(sue);
	Show(sidney);
	return 0;
}

template<typename T>
void Swap(T &a,T &b)
{
	T temp;
	temp = a;
	a = b;
	b = temp;
}

template<> void Swap<job>(job &j1,job &j2)
{
	double t1;
	int t2;
	t1 = j1.salary;
	j1.salary = j2.salary;
	j2.salary = t1;
	t2 = j1.floor;
	j1.floor = j2.floor;
	j2.floor = t2;
}

void Show(job &j)
{
	cout << j.name  << ": $" << j.salary << " on floor " << j.floor << endl;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C++模板重载 的相关文章

随机推荐

  • openGauss学习笔记-38 openGauss 高级数据管理-游标

    文章目录 openGauss学习笔记 38 openGauss 高级数据管理 游标 38 1 语法格式 38 2 参数说明 38 3 示例 openGauss学习笔记 38 openGauss 高级数据管理 游标 为了处理SQL语句 存储过
  • 寒假训练 第四节 数据结构基础 总结

    并查集 定义 并查集是一种树型的数据结构 用于处理一些不相交集合的合并及查询问题 并查集的思想是用一个数组表示了整片森林 parent 树的根节点唯一标识了一个集合 我们只要找到了某个元素的的树根 就能确定它在哪个集合里 操作 合并 把两个
  • Printk打印内核日志

    一 背景 Linux 内核中提供了内核日志打印的工具printk 它的使用方式C语言中的printf是类似的 接下来我们介绍一下printk的使用方式 本文以打印Binder中的日志为例 进行演示 printk的方法声明和日志级别 bind
  • Python 环境在anaconda中下载并安装NLTK说明

    在spyder的Ipython python中的shell 中 即右下角内输入以下两条命令 gt gt gt import nltk gt gt gt nltk download
  • fbx-python安装

    下载 官网 下载 链接 百度云 提取码 gapa 安装 安装fbx20202 fbxpythonsdk win exe 一路next 然后FBX Python Bindings zip解压到C Program Files Autodesk
  • java用枚举代替int常量,让你的系统更安全--用枚举enum替代int常量

    做应用系统时 我们往往假设用户是小白 那么为了保证系统的正常 我们往往会对用户的参数做限制 并且前后端都要对用户的参数做验证 那我们在设计的时候是否可以提前预防这种问题呢 其中的一种方式就是 用枚举enum替代int常量 枚举的好处 做应用
  • sql语句去重distinct、统计(count、sum)

    1 查询数组并去重 用distinct 函数 select distinct 字段名 from 表名 2 count 和 sum 1 count 函数是用于统计数据的条数 select count as count from A where
  • 备战2022蓝桥杯每日一题(1)

    简单的a b 题目描述 收获 scanf函数的返回值 scanf 函数返回值分为3种 1 返回正整数 表示正确输入参数的个数 2 返回整数0 表示用户的输入不匹配 无法正确输入任何值 3 返回 1 表示输入流已经结束 在Windows下 用
  • Android 不自动弹出软键盘

    进入新 Activity界面 想阻止软键盘自动弹出 只要在 AndroidManifest xml 中对应的Activity下设置 android windowSoftInputMode adjustUnspecified stateHid
  • J-A-V-A的知识积累(一)

    1 hashMap的深入分析 https blog csdn net lianhuazy167 article details 66967698 红黑树 https blog csdn net cyp331203 article detai
  • python读写excel时间的处理

    用python读写excel 当读写内容为时间时 会发现时间变成了浮点数 这篇文章记录了对于这种情况的处理 将时间写入excel dateFormat xlwt XFStyle dateFormat num format str yyyy
  • 复试英语面试常见问题整理自用,考研复试英语问题汇总

    更多复试资料获取方式在文末 个人整理 完全免费 更多复试资料获取方式在文末 个人整理 完全免费 Why did you choose our university Firstly it provides high quality compu
  • stm32定时器与定时器中断

    1 定时器种类 注 主要使用通用定时器 2 通用计时器特点描述 说明 四个通道互不影响 3 定时器中断触发条件 4 定时器计数模式 分为向上 向下 向上向下模式 5 通用定时器作用用途 测量输入输出波长度等 说明 每个定时器完全独立没有共享
  • 【夜莺监控方案】10-报警策略-端口报警

    文章目录 1 邮箱配置 2 资源管理 中配置 1 2 创建端口采集 必要 3 配置告警策略 1 邮箱配置 opt n9e server etc script root n9e v5 script ll 总用量 12 rwxr xr x 1
  • 抖音广告助手是干什么的?在文章中为大家总结了4点

    抖音广告助手是干什么的 我们在刷抖音短视频时可能会刷到一个名称为 抖音广告助手 的账号 一些用户可能对于这个账号到底是干什么的存在着一定的疑问 这里首先告诉大家一点的是 这个账号是属于官方的一个账号 那么到底是用来干什么的 在接下来的文章中
  • linux下strace的用法

    strace多个进程 strace ps aux grep ProcGroupName grep v grep awk print p 2 xargs echo strace多个进程id下的所有线程 strace ps T ProcId1
  • DedeCMS搜索文件search.php移动至根目录的方法

    这篇文章主要为大家详细介绍了DedeCMS搜索文件search php移动至根目录的方法 具有一定的参考价值 感兴趣的小伙伴们可以参考一下 有需要的朋友可以收藏方便以后借鉴 织梦默认的搜索页是在根目录下的plus文件夹内的search ph
  • centOS 安装 Android NDK

    原文链接 https www jianshu com p 9ada3fd9c286 侵删 1 文件准备 下载linux版本的ndk 可到android studio中文网下载 2 工具准备 命令 yum y install upzip 或y
  • 如何恢复误删除的注册表信息

    如何恢复误删除的注册表信息 首先我们要打开注册表 不会打开注册表的朋友 请搜索前面我发表过的一篇题为 快速打开注册表方法大全 的文章 在这里我使用最简单的 windows R 键 再输入 regedit 回zhidao车确认即可快速打开 打
  • C++模板重载

    C 模板重载 产生背景 需要多个对不同类型使用同一种算法函数时可以使用模板 但是并非所有的类型都使用同一种算法 为了解决这个问题 产生了模板重载 Tips 1 如同函数的重载一样 模板重载函数的特征标必须不同 2 并非所有的模板参数都必须是