函数模板 及显式具体化(C++)
函数模板 将同一种算法应用与不同类型的函数时
#include<iostream>
#include<string> template
<typename T> void mymyswap(T &a, T &b);//每定义函数或者函数原型在前边都要加
template<typename name> int main()
{
using namespace std;
int i, j;
cin >> i >> j;
mymyswap(i, j);
cout << i<<" " << j;
}
template <typename T> void mymyswap(T &a, T &b)
//每定义函数或者函数原型在前边都要加
template<typename name> {
T temp; temp = a; a = b; b = temp;
}
2模板的局限性,假设传入数组,那么数组不能直接交换,要不然交换的就是地址,还有其他案例等,要根据情况使用模板
3显式具体化 :假设我们定义了一个结构体 在C++中,一个结构体可以直接赋值给另一个结构体 我们希望交换这个结构体的内容,可以使用 T temp; temp = a; a = b; b = temp;
在C++中,一个结构体可以直接赋值给另一个结构体 但是假设我们只想交换结构体实例化中两个中的floor或者floor和salary而不交换name成员,则需要不同的代码,需要额外写,函数重载也不能使用 然而可以提供一个具体化函数定义——成为显示具体化
定义: template <> 函数返回类型 函数名字 (参数), 而且必须先声明模板,才能进一步声明显式具体化函数
template <typename T> void myswap(T &, T &);
template <> void myswap<job>(job&, job&);//显式化原型
template <> void myswap<job>(job &a, job &b) {****************
}
下边将实现一个将结构体内信息部分调换的函数以及代码
template <typename T> void myswap(T &, T &);//函数模板
struct job //定义结构体
{ char name[40];
double salary;
int floor; };
template <> void myswap<job>(job&, job&);//在函数模板的基础上进一步定义显式化原型
template <> void myswap<job>(job &a, job &b) {
double t1;
int t2; //定义两个临时变量
t1 = a.salary;
a.salary = b.salary;
b.salary = t1;//交换两个结构体的salary变量
t2 = a.floor;
a.floor = b.floor;
b.floor = t2;//交换两个结构体的floor变量 }
void show(job& a)//将交换后的信息打印出来 {
using namespace std;
cout<< "名字:" << a.name <<endl;
cout <<"薪水:" << a.salary << endl;
cout <<"楼层:" <<a.floor << endl;
}
主函数
int main() {
using namespace std; job j1 = {"小明",5000,2};
job j2 = { "小红",8000,1 };
myswap(j1, j2);
show(j1);
show(j2);
}
函数模板 及显式具体化(C++)的更多相关文章
- C++语言基础(19)-模板的显式具体化
应用背景: 例如有下面的函数模板,它用来获取两个变量中较大的一个: template<class T> const T& Max(const T& a, const T&a ...
- javascript内置函数提供的显式绑定
内置函数提供的显式绑定 最近在开发中遇到使用arr.map(module.fun) 这样的写法时(在一个模块调用了另外一个模块的方法), 造成了函数中this丢失的问题, 显示为undefined, ...
- C++基础--函数模板
函数模板是通用的函数描述,其使用泛型来定义函数.其实就是有些操作,如果撇开具体的变量的数据类型,其操作是一样的如果我们将这些操作写成一个模板,在调用不同变量的时候就设定好变量类型就可了,后续的操作基本 ...
- C++ 函数重载,函数模板和函数模板重载,选择哪一个?
重载解析 在C++中,对于函数重载.函数模板和函数模板重载,C++需要有一个良好的策略,去选择调用哪一个函数定义(尤其是多个参数时),这个过程称为重载解析. (这个过程将会非常复杂,但愿不要遇到一定要 ...
- C++-函数模板特化如何避免重复定义
我正在用一个基于模板的库源代码,该库包含一些针对特定类型的模板函数特化.类模板,函数模板和模板函数特化都在头文件中.我在我的.cpp文件中 #include 头文件并编译链接工程.但是为了在整个工程 ...
- C++模板之函数模板实例化和具体化
模板声明 template<typename/class T>, typename比class最近后添加到C++标准. 常规模板,具体化模板,非模板函数的优先调用顺序. 非模板函数(普通 ...
- C++模板之隐式实例化、显示实例化、隐式调用、显示调用和模板特化详解
模板的实例化指函数模板(类模板)生成模板函数(模板类)的过程.对于函数模板而言,模板实例化之后,会生成一个真正的函数.而类模板经过实例化之后,只是完成了类的定义,模板类的成员函数需要到调用时才会被初始 ...
- C++函数模板详解(一):概念和特性
函数模板是指这样的一类函数:可以用多种不同数据类型的参数进行调用,代表了一个函数家族.它的外表和普通的函数很相似,唯一的区别就是:函数中的有些元素是未确定的,这些元素将在使用的时候才被实例化.先来看一 ...
- C++模板显式实例化,隐式实例化,特化(具体化,偏特化)辨析
最近再次看C++ PRIMER PLUS的时候看到这个部分感觉讲得很烂,前后口径不一致,所以写个辨析让自己明白的同时也希望对此不太清楚的朋友能搞懂. 总结一下,C++只有模板显式实例化(explici ...
- C++学习笔记36 (模板的细节明确template specialization)和显式实例(template instantiation)
C++有时模板很可能无法处理某些类型的. 例如: #include <iostream> using namespace std; class man{ private: string n ...
随机推荐
- day03-功能实现03
功能实现03 9.功能08-分页显示 9.1需求分析 将查询的数据进行分页显示,要求功能如下: 显示共多少条记录 可以设置每页显示几条 点击第几页,显示对应的数据 9.2思路分析 后端使用MyBati ...
- springMVC之对象中的基本类型数据绑定遇到的问题
最进在开发关于SpringMVC框架的项目时,发现个数据绑定的问题,如果这个实体对象里的字段类型为long.int.double时,客户端就报400语法错误 源代码: controller: @Req ...
- SQL之QL
从中文语法上来说,应该先写FROM语句比较好理解 基础查询语句 SELECT [DISTINCT] target-list FROM tables WHERE qualification GROUP ...
- 3DCAT亮相糖酒会,为元宇宙展会提供实时云渲染支持
4月12日,第108届全国糖酒商品交易会(下文简称"糖酒会")在成都正式开幕,吸引了众多酒类企业和行业人士的参与. 图片源自新华社 本次糖酒会上,某展会采用了"双线&qu ...
- 【实时渲染】3DCAT实时渲染云助力游戏上云!
随着社会的发展技术的提升,云计算技术得到越来越多人的重视.同时随着5G的落地,游戏产业也迎来了新的革命.一些游戏厂商为了寻求新的发展机会,推出基于云计算的游戏"云游戏",将游戏平台 ...
- MongoDB4.0.11服务没有响应控制功能解决办法
如图 MongDB安装好后启动服务失败 解决办法 进入到你的MongDB bin目录下执行 mongod.exe --remove --serviceName "MongoDB" ...
- @Value static静态变量注入
@Component public class Config { @Value("${config1}") private static String config1; } 使用上 ...
- Docker Commands Diagram
- 第十三届蓝桥杯大赛软件赛省赛【Java 大学B 组】试题D: 最少刷题数
1 import java.util.ArrayList; 2 import java.util.Scanner; 3 4 public class Main { 5 public static vo ...
- python整理1992、2009国家标准学科分类及代码数据并存入MySQL数据库
文件内容 处理结果 代码 1 import pandas as pd 2 import pymysql 3 4 5 def get_subject_1992(): 6 res={} 7 the_for ...