当前位置: 首页 > news >正文

函数模板的具体化

函数模板优点是通用性,可以解决某个方面的普遍性问题,但是这个世界上的事情不是绝对的,有普遍的,就有绝对的。举个栗子:

#include <iostream>
using namespace std;
template <typename T>
void Swap(T &a,T &b) {T temp = a;a = b;b = temp;return ;
}
class CGirl {public:int m_bk;//编号string m_name;	      //姓名int m_rank;	      //排名
};int main() {return 0;
}

我要是只想用这个Swap函数交换超女类的排名,不交换其他成员,这样的话swap函数模板中现有的代码就不合适了;

——————————————————————————————————————————

为了满足特殊的需求,可以提供一个具体化的函数,当编译器找到与函数调用匹配的具体化定义时,将使用该定义,不再寻找模板。————函数模板的具体化!!

语法:

template <> void 函数模板名 (参数列表)

//函数体;

}

#include <iostream>
using namespace std;class CGirl {public:int m_bk;//编号string m_name;	      //姓名int m_rank;	      //排名
};
template <typename T>
void Swap(T &a,T &b) {T temp = a;a = b;b = temp;return ;
}
//具体化函数:
template <> void Swap<CGirl>(CGirl& g1, CGirl& g2)
//template <> void Swap(CGirl& g1, CGirl& g2) 这两种方法是一样的;
{int temp = g1.m_rank;g1.m_rank = g2.m_rank;g2.m_rank = temp;cout << "带哦用的Swap(CGirl &g1,CGirl &g2)\n";return ;
}int main() {int a = 10, b = 20;Swap(a, b);cout << "a = " << a << ", b = " << b << endl;CGirl g1, g2;g1.m_rank = 1;g2.m_rank = 2;Swap(g1, g2);cout << "g1.m_rank = " << g1.m_rank << " , g2.m_rank = " << g2.m_rank << endl;return 0;
}

对于给定的函数名,可以有普通函数,函数模板和具体化的函数模板,以及他们的重载版本;

编译器用用各种函数的规则:

1:具体化优先于常规模板,普通函数优先于具体化和常规模板;

2:如果希望使用函数模板,可以用空模板参数强制使用函数模板;

3:如果函数模板能产生更好的匹配,将优先于普通函数。

#include <iostream>
using namespace std;void Swap(int a , int b) {cout << "使用了普通函数。\n";
}
template <typename T>
void Swap(T a,T b) {cout << "使用了函数模板。\n";
}
//具体化函数:
template <> 
void Swap(int a,int b)
{cout << "使用了具体化的函数模板。\n";
}int main() {Swap(1, 2);return 0;
}

普通函数优先于函数模板,所以编译器选择第一个,普通函数;

使用了普通函数。C:\Users\代伟业\Desktop\C++\初始化列表\this指针\x64\Debug\this指针.exe (进程 23260)已退出,代码为 0。
按任意键关闭此窗口. . .

如果把普通函数注释掉:选择了具体化的函数模板:

#include <iostream>
using namespace std;//void Swap(int a , int b) {
//	cout << "使用了普通函数。\n";
//}
template <typename T>
void Swap(T a,T b) {cout << "使用了函数模板。\n";
}
//具体化函数:
template <> 
void Swap(int a,int b)
{cout << "使用了具体化的函数模板。\n";
}int main() {Swap(1, 2);return 0;
}
使用了具体化的函数模板。C:\Users\代伟业\Desktop\C++\初始化列表\this指针\x64\Debug\this指针.exe (进程 13556)已退出,代码为 0。
按任意键关闭此窗口. . .

如果把具体化版本的代码注释掉,再运行,只能使用函数模板了:

#include <iostream>
using namespace std;//void Swap(int a , int b) {
//	cout << "使用了普通函数。\n";
//}
template <typename T>
void Swap(T a,T b) {cout << "使用了函数模板。\n";
}
//具体化函数:
//template <> 
//void Swap(int a,int b)
//{
//	cout << "使用了具体化的函数模板。\n";
//}int main() {Swap(1, 2);return 0;
}
使用了函数模板。C:\Users\代伟业\Desktop\C++\初始化列表\this指针\x64\Debug\this指针.exe (进程 21920)已退出,代码为 0。
按任意键关闭此窗口. . .

----------

如果不想使用普通函数,想使用函数模板,可以加空模板参数:

#include <iostream>
using namespace std;void Swap(int a , int b) {cout << "使用了普通函数。\n";
}
template <typename T>
void Swap(T a, T b) {cout << "使用了函数模板。\n";
}
//具体化函数:
template <> 
void Swap(int a,int b)
{cout << "使用了具体化的函数模板。\n";
}int main() {Swap<>(1, 2);return 0;
}
使用了具体化的函数模板。C:\Users\代伟业\Desktop\C++\初始化列表\this指针\x64\Debug\this指针.exe (进程 23204)已退出,代码为 0。
按任意键关闭此窗口. . .

如果把具体化版本的代码注释掉,再运行,只能使用函数模板了:

相关文章:

函数模板的具体化

函数模板优点是通用性&#xff0c;可以解决某个方面的普遍性问题&#xff0c;但是这个世界上的事情不是绝对的&#xff0c;有普遍的&#xff0c;就有绝对的。举个栗子&#xff1a; #include <iostream> using namespace std; template <typename T> void Swap(T &…...

【Linux 内存管理】

文章目录 1. 为什么要有虚拟内存呢&#xff1f;&#x1f50d; 1. 为什么要有虚拟内存呢&#xff1f;&#x1f50d;...

AJAX 数据库

AJAX 数据库 1. 引言 AJAX(Asynchronous JavaScript and XML)是一种流行的网络开发技术,它允许网页在不重新加载整个页面的情况下与服务器交换数据和更新部分网页内容。AJAX技术与数据库的结合,为现代网络应用提供了更加丰富和动态的用户体验。本文将探讨AJAX如何与数据库…...

力扣719.找出第K小的数对距离

力扣719.找出第K小的数对距离 二分答案 朴素版 双指针遍历数组 超过界限break auto check [&](int mid) -> bool{int res0;for(int i0;i<n-1;i)for(int ji1;j<n;j){if(nums[j] - nums[i] > mid) break;elseif(res > k) return true;}return false;};优…...

富格林:掌握可信出金交易策略

富格林认为&#xff0c;黄金市场是起起落落&#xff0c;似乎机遇无处不在&#xff0c;但很少有人能真正抓住机遇。黄金可以做多也可以做空&#xff0c;做空主要是为了从黄金价格波动的价差中获利。只有采用正规可信的操作技巧&#xff0c;才能实现顺利获利出金&#xff0c;减少…...

HCS-华为云Stack-容器网络

HCS-华为云Stack-容器网络 容器隧道overlay VPC网络...

【CSS in Depth2精译】1.1 层叠

CSS 本质上就是声明规则&#xff0c;并让这些特定的规则在各种情况下生效。一个类添加到某个元素上&#xff0c;则应用这个类包含的这一些样式&#xff1b;元素 X 是元素 Y 的一个子节点&#xff0c;则应用另一些样式。浏览器于是根据这些规则&#xff0c;判定所有样式生效的具…...

【读博日记】拓扑结构(待修正)

Topology 拓扑学 内容来源于互联网&#xff0c;还在甄别中——20240617 拓扑结构指把实体抽象成与其形状大小无关的点&#xff0c;把连接实体的线路抽象成线&#xff0c;再研究这些电线之间的关系。 所谓相似的拓扑结构&#xff1a; 例如一个圆环变成正方形、长方形、三角形…...

QT 中setVisible()和setEnabled()的区别

setVisible(bool)和setEnabled(true)在PyQt&#xff08;以及其他类似的图形用户界面框架&#xff09;中分别用于控制控件的可见性和可用性&#xff0c;它们之间的主要区别如下&#xff1a; setVisible(bool) 功能&#xff1a;这个函数用于设置QWidget控件的可见状态。参数&am…...

速度(velocity)、加速度(acceleration)、急动度(jerk)和弹跳度(snap)傻傻分不清楚?

...

【YashanDB知识库】PHP使用ODBC使用数据库绑定参数功能异常

【问题分类】驱动使用 【关键字】ODBC、驱动使用、PHP 【问题描述】 PHP使用PDO_ODBC连接yashan数据库&#xff0c;使用绑定参数获取数据时&#xff0c;客户现场出现报错 本地复现未出现异常报错&#xff0c;但是无法正确获取数据。 【问题原因分析】开启ODBC报错日志后&am…...

初级篇-Docker容器知识

Docker容器 容器主要是解决跨平台、跨服务运行环境的问题 容器将运行业务应用所需要的东西进行打包&#xff0c;包括依赖项、配置、脚本、二进制文件等。在容器中运行镜像&#xff0c;不用担心不同环境下运行不一致的问题。 容器本质上是一个特殊的进程&#xff0c;将资源、…...

【抽代复习笔记】19-群(十三):奇偶置换、循环置换的几个定理及例题

定义&#xff1a; ①在Sn中&#xff0c;能够表示为奇数多个对换乘积的置换称为“奇置换”&#xff0c;能够表示为偶数多个对换乘积的置换称为“偶置换”&#xff1b; ②所有偶置换的集合记为An。 例1&#xff1a;&#xff08;1&#xff09;计算S1和S2中奇、偶置换的数目&…...

RT-Thread简介及启动流程分析

阅读引言&#xff1a; 最近在学习RT-Thread的内部机制&#xff0c;觉得这个启动流程和一些底层原理还是挺重要的&#xff0c; 所以写下此文。 目录 1&#xff0c; RT-Thread简介 2&#xff0c;RT-Thread任务的几种状态 3&#xff0c; 学习资源推荐 4&#xff0c; 启动流程分…...

MCU嵌入式AI开发笔记-视频笔记同步更新

MCU嵌入式AI开发笔记 抖音B站等站点笔记视频同步更新 01嵌入式AI大的方向 STM32跑神经网络 http://news.eeworld.com.cn/mp/EEWorld/a134877.jspx 为什么可以在STM32上面跑神经网络?简而言之就是使用STM32CubeMX中的X-Cube-AI扩展包将当前比较热门的AI框架进行C代码的转化,…...

DoIP——step2:车辆发现

文章目录 前言一、IP地址配置1.1 AutoIP1.2 DHCP1.3 DoIP实体的IP地址配置流程二、车辆发现车辆声明报文内容如下:前言 完成诊断设备到车辆的物理连接并通过激活线使能诊断连接后边缘节点将会将连接状态传递至应用层,在开始车辆发现过程之前,需要先进行各自的IP地址配置,获…...

【动态规划】0-1背包问题

【动态规划】0-1背包问题 题目:现在有四个物品&#xff0c;背包总容量为8&#xff0c;背包最多能装入价值为多少的物品? 我的图解 表格a【i】【j】表示的是容量为j的背包装入前i个物品的最大价值。 拿a【1】【1】来说&#xff0c;它的值就是背包容量为1&#xff0c;只考虑…...

WordPress 高级缓存插件 W3 Total Cache Pro 详细配置教程

说起来有关 WordPress 缓存插件明月已经发表过不少文章了,但有关 W3 Total Cache Pro 这个 WordPress 高级缓存插件除了早期【网站缓存插件 W3 Total Cache,适合自己的才是最好的!】一文后就很少再提及了,最近因为明月另一个网站【玉满斋】因为某些性能上的需要准备更换缓存…...

每日一题——Python实现PAT乙级1012 数字分类(举一反三+思想解读+逐步优化)五千字好文

一个认为一切根源都是“自己不够强”的INTJ 个人主页&#xff1a;用哲学编程-CSDN博客专栏&#xff1a;每日一题——举一反三Python编程学习Python内置函数 Python-3.12.0文档解读 目录 我的写法 代码优点 代码缺点 时间复杂度 空间复杂度 代码改进建议 我要更强 哲…...

Unity2D游戏制作入门 | 13 ( 之人物三段攻击 )

上期链接&#xff1a;Unity2D游戏制作入门 | 12(之人物受伤和死亡的逻辑动画)-CSDN博客 上期我们聊了人物的受伤和死亡的逻辑和动画&#xff0c;我们主要学习了事件的执行&#xff0c;即我们在人物受伤时可能会触发很多的事件&#xff0c;比如触发人物受伤的动画以及播放音乐等…...

DAY04 HTMLCSS

文章目录 一 表单(1) 数字控件(2) 颜色控件(3) 日期控件(4) 月份控件(5) 星期控件(6) 搜索控件(7) 范围控件 二 浮动框架三 结构化标签四 CSS1 CSS概述2 CSS的编写位置1. inline style 行内样式2. inner style 内部样式3. outer style 外部样式4. 小结 3 CSS选择器1. 通用选择器…...

Linux_理解程序地址空间和页表

目录 1、进程地址空间示意图 2、验证进程地址空间的结构 3、验证进程地址空间是虚拟地址 4、页表-虚拟地址与物理地址 5、什么是进程地址空间 6、进程地址空间和页表的存在意义 6.1 原因一&#xff08;效率性&#xff09; 6.2 原因二&#xff08;安全性&#xff09; …...

NAND闪存市场彻底复苏

在全球内存市场逐渐走出阴霾、迎来复苏曙光之际&#xff0c;日本存储巨头铠侠&#xff08;Kioxia&#xff09;凭借敏锐的市场洞察力和及时的战略调整&#xff0c;成功实现了从生产紧缩到全面复苏的华丽转身。这一转变不仅彰显了企业在逆境中的生存智慧&#xff0c;也为全球半导…...

过拟合与正则化

Location Beijing 过拟合 对于一个模型 A A A&#xff0c;解向量空间为 θ \theta θ&#xff0c;误差函数用式1表示 J ( θ ) J a c c [ y θ ( x ) − y ] 2 (1) J(\theta)J_{acc}[y_\theta(x)-y]^2\tag{1} J(θ)Jacc​[yθ​(x)−y]2(1) 首先我们考虑用模型 A A A拟合下…...

VMware挂载NAS存储异常处理

问题概述 由于非法关机或恢复&#xff0c;NFS存储可能会出现以下问题&#xff1a; 数据存储处于挂起状态或无法正常识别。虚拟机的配置文件或虚拟磁盘仍然注册在异常数据存储上。系统误认为有虚拟机在使用该数据存储。 问题对策 下面是详细的排查步骤和解决对策&#xff1a…...

Redis 7.x 系列【4】命令手册

有道无术&#xff0c;术尚可求&#xff0c;有术无道&#xff0c;止于术。 本系列Redis 版本 7.2.5 源码地址&#xff1a;https://gitee.com/pearl-organization/study-redis-demo 文章目录 1. 说明2. 命令手册2.1 Generic2.2 数据类型2.2.1 String2.2.2 Hash2.2.3 List2.2.4 S…...

走进Elasticsearch

什么是ES 是一个分布式、RESTful风格的搜索和数据分析引擎 中文参考文档&#xff1a; 《Elasticsearch中文文档》 | Elasticsearch 技术论坛 elasticSearch官网&#xff1a; Functions and Operators | Elasticsearch Guide [7.11] | Elastic查询方式 Kibana查询&#xff08;原…...

QT TCP服务器和客户端示例程序

下面是一个简单的 Qt TCP 服务器和客户端示例&#xff0c;演示了如何使用 vSetDriver、vSetListener 和 vTcpServerStart 函数。假设 vSetDriver 和 vSetListener 是你定义的自定义函数。 TCP 服务器部分 tcpserver.h #ifndef TCPSERVER_H #define TCPSERVER_H#include <QT…...

Xlua三方库Android编译出错解决办法

Xlua三方库Android编译出错解决办法 最近听老师的热更教程&#xff0c;讲到xlua编译android平台会报错&#xff0c;也是看了老师的博客&#xff0c;按照方法去解决&#xff0c;然而问题并没有解决。应该是因为代码更新或者版本不一样&#xff0c;在此简单记录一下解决过程。 参…...

美国犹他州立大学《Nature Geoscience》(IF=18)!揭示草本植物对土壤有机碳的重要贡献!

随着全球变暖的影响越来越显著&#xff0c;碳固定成为了一个备受关注的话题。在这个背景下&#xff0c;热带草原被认为是一个潜在的碳固定区域。然而&#xff0c;目前的研究主要关注于在热带草原中种植树木&#xff0c;以期望增加土壤有机碳含量。但是&#xff0c;热带草原中的…...

英文网站建设电话咨询/哪里有seo排名优化

问题描述&#xff1a;eclipse在debug模式下&#xff0c;当鼠标移动到某个变量上面时不自动显示该变量对应的值。解决方法&#xff1a;在eclipse中点击 window->preferences->java->editor->hovers&#xff0c; 勾选variable values&#xff0c;(如果combined hover…...

湘潭网站建设 都来磐石网络/电脑培训学校哪家好

2019网易云创峰会&#xff0c;以“连接▪洞察▪进化”为主题&#xff0c;汇聚行业领袖、技术大咖及业界代表&#xff0c;探讨微服务、大数据、中台等前沿技术的聚变效应。届时&#xff0c;中台技术与实践专场为付费高端闭门会议形式&#xff0c;丰富的实践案例、专家面对面互动…...

电子商务网站功能需求/磁力屋 最好用

1&#xff1a;Mongostat MongoDB2.6版本 MongoDB3.0版本 2&#xff1a;db.setProfilingLevel(2):打开profiler 类似于MySQL的slow log Profiler默认是关闭的&#xff0c;你可以选择全部开启&#xff0c;或者有慢查询的时候开启。 db.setProfilingLevel(level,<slowms>) 0…...

如何做生鲜配送网站生意/湖北短视频搜索seo

想象一下&#xff0c;如果您企业的人力资源部门不仅可以使用数据来预测员工的敬业度&#xff0c;还能够知道员工什么时候可能会跳槽?而这就是HighGround公司的 创始人兼首席执行官Vip Sandhir想要通过该公司最新员工敬业度产品所实现的目标。通过创建能够直接从员工中挖掘数据…...

广东省网站开发建设/百度推广后台登录入口官网

工厂模式的实现方式和原理都不难理解和掌握。但是&#xff0c;在学习完之后&#xff0c;发现网上给的例子&#xff0c;根本体现不了工厂模式的作用。先不说存在有的例子本身就是错误的&#xff0c;主要是例子中的代码太简单&#xff0c;可以说没必要用工厂模式&#xff0c;只不…...

wordpress 官方网站/怎么做公司网站推广

问题描述 所需的包在mavenCentral中没有&#xff0c;但又需要这样的包&#xff08;有可能为另一个项目打成的jar包&#xff09; 解决方法 方法一&#xff1a; 创建本地maven&#xff08;或gradle&#xff09;仓库&#xff0c;把所需的jar放入仓库中&#xff0c;通过mavenLoc…...