函数模板 及显式具体化(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 ...
随机推荐
- 使用Deployment和Service实现简单的灰度发布
在Kubernetes中,使用单个Service和多个Deployment来实现灰度发布的一种常见方法是利用标签(Labels)和选择器(Selectors)来控制哪些Pods接收来自Service的 ...
- 简洁版docker跑mongo
参考,欢迎点击原文:https://www.runoob.com/docker/docker-install-mongodb.html(菜鸟) 以下是拉取docker镜像并运行起来 docker pu ...
- 京东Linux 运维工程师面试真题
京东Linux 运维工程师面试真题 首先我们来看下京东 Linux 运维工程师招聘岗位要求: [岗位定义]运维工程师 [岗位薪资]10K-20K [基本要求]北京 / 经验 3-5 年 / 本科及以上 ...
- 从时间复杂度的角度出发,list和vector之间查找,插入,删除等数据操作的区别
list和vector是STL(标准模板库)中常用的两种序列容器,它们各自在不同类型的操作上有着不同的优势.下面是list和vector在不同操作上的擅长之处: list的擅长操作 插入和删除操作:l ...
- drools中使用全局变量
一.背景 在我们编写drools的规则文件的时候,有些时候需要用到全局变量,那么这个该怎么实现呢?有哪些注意事项呢? 二.前置知识 1.语法结构 2.全局变量的特点 使用global来定义全局变量,它 ...
- Nancy一个轻量级用于构建基于 HTTP 的 Web 服务
记录一下: Nancy官网地址:http://nancyfx.org/ GitHub文档地址:https://github.com/NancyFx/Nancy/wiki/Documentation 有 ...
- KingbaseES V8R6 运维案例 -- sys_filenode.map故障案例
案例说明: 数据库下的sys_filenode.map文件被破坏,导致此数据库无法连接访问. Nail表(内核系统表)Relfilenode的存储机制: 经过研究发现,在数据目录里存在着pg_fi ...
- NET Core使用Grpc通信(一):一元
gRPC是一个现代的开源高性能远程过程调用(RPC)框架,它可以高效地连接数据中心内和跨数据中心的服务,支持负载平衡.跟踪.运行状况检查和身份验证. gRPC通过使用 Protocol Buffers ...
- Linux下Bochs,NASM安装和使用
安装环境 以Ubuntu为例,先更新一下: sudo apt-get update sudo apt-get upgrade 然后安装Bochs环境: sudo apt-get install bui ...
- SQLAlchemy详解
一.SQLAlchemy介绍 SQLAlchemy 是 Python SQL 工具包和对象关系映射器,为应用程序开发人员提供 SQL 的全部功能和灵活性. SQLAlchemy支持SQLite.Pos ...