函数模板 将同一种算法应用与不同类型的函数时

#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++)的更多相关文章

  1. C++语言基础(19)-模板的显式具体化

    应用背景: 例如有下面的函数模板,它用来获取两个变量中较大的一个: template<class T> const T& Max(const T& a, const T&a ...

  2. javascript内置函数提供的显式绑定

    内置函数提供的显式绑定 最近在开发中遇到使用arr.map(module.fun) 这样的写法时(在一个模块调用了另外一个模块的方法), 造成了函数中this丢失的问题, 显示为undefined, ...

  3. C++基础--函数模板

    函数模板是通用的函数描述,其使用泛型来定义函数.其实就是有些操作,如果撇开具体的变量的数据类型,其操作是一样的如果我们将这些操作写成一个模板,在调用不同变量的时候就设定好变量类型就可了,后续的操作基本 ...

  4. C++ 函数重载,函数模板和函数模板重载,选择哪一个?

    重载解析 在C++中,对于函数重载.函数模板和函数模板重载,C++需要有一个良好的策略,去选择调用哪一个函数定义(尤其是多个参数时),这个过程称为重载解析. (这个过程将会非常复杂,但愿不要遇到一定要 ...

  5. C++-函数模板特化如何避免重复定义

     我正在用一个基于模板的库源代码,该库包含一些针对特定类型的模板函数特化.类模板,函数模板和模板函数特化都在头文件中.我在我的.cpp文件中 #include 头文件并编译链接工程.但是为了在整个工程 ...

  6. C++模板之函数模板实例化和具体化

    模板声明 template<typename/class T>,  typename比class最近后添加到C++标准. 常规模板,具体化模板,非模板函数的优先调用顺序. 非模板函数(普通 ...

  7. C++模板之隐式实例化、显示实例化、隐式调用、显示调用和模板特化详解

    模板的实例化指函数模板(类模板)生成模板函数(模板类)的过程.对于函数模板而言,模板实例化之后,会生成一个真正的函数.而类模板经过实例化之后,只是完成了类的定义,模板类的成员函数需要到调用时才会被初始 ...

  8. C++函数模板详解(一):概念和特性

    函数模板是指这样的一类函数:可以用多种不同数据类型的参数进行调用,代表了一个函数家族.它的外表和普通的函数很相似,唯一的区别就是:函数中的有些元素是未确定的,这些元素将在使用的时候才被实例化.先来看一 ...

  9. C++模板显式实例化,隐式实例化,特化(具体化,偏特化)辨析

    最近再次看C++ PRIMER PLUS的时候看到这个部分感觉讲得很烂,前后口径不一致,所以写个辨析让自己明白的同时也希望对此不太清楚的朋友能搞懂. 总结一下,C++只有模板显式实例化(explici ...

  10. C++学习笔记36 (模板的细节明确template specialization)和显式实例(template instantiation)

    C++有时模板很可能无法处理某些类型的. 例如: #include <iostream> using namespace std; class man{ private: string n ...

随机推荐

  1. vite + vue3 打包后 本地直接运行 type="module" crossorigin 替换为defer - 多个vue文件就不好使了

    vite + vue3 打包后 本地直接运行 type="module" crossorigin 替换为defer 需求: 想打包后,双击运行,不启动服务 修改 vite.conf ...

  2. vue 动态加载css,改变网站皮肤模式

    Vue.mixin({ created () { require('view-design/dist/styles/iview.css') } }) 参考资料:https://blog.csdn.ne ...

  3. html添加css样式的两种方法

      html添加css样式有三种方法,分别为行内式(使用style属性,在特定的HTML标签内使用).内嵌式(style标签把css代码放在特定页面的head部分中).外联式(使用link标签,将外部 ...

  4. vue入门教程之-组件

    vue入门教程之-组件 欢迎关注博主公众号「java大师」, 专注于分享Java领域干货文章, 关注回复「资源」, 免费领取全网最热的Java架构师学习PDF, 转载请注明出处 https://www ...

  5. 关于使用Kotlin开发SpringBoot项目使用@Transactional和@Autowired的报错问题

    原文地址: 关于使用Kotlin开发SpringBoot项目使用@Transactional和@Autowired的报错问题 - Stars-One的杂货小窝 问题描述 最近在开发一个订单模块,需要出 ...

  6. LINQ 学习之路

    一.为什么要使用 LINQ 要理解为什么使用 LINQ,先来看下下面的例子 例子:要统计字符串中每个字母出现的频率(忽略大小写),然后按照从高到低的顺序输出出现频率高于2次和其出现的的频率.如果用传统 ...

  7. 三维模型3DTile格式轻量化在三维展示效果上的重要性分析

    三维模型3DTile格式轻量化在三维展示效果上的重要性分析 三维模型3DTile格式轻量化在三维展示效果上扮演着至关重要的角色.随着计算机图形学和虚拟现实技术的不断发展,我们已经可以创建和渲染非常精细 ...

  8. 记录--一个炫酷的css动画

    这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 最近有一个需求,要我实现一个动画效果,效果如下 简单分析了一下效果,是一个3d的效果,首先是一个圆,接着是两段圆环,第三层是一堆小圆环,最 ...

  9. 记录--教你用three.js写一个炫酷的3D登陆页面

    这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 前言: 该篇文章用到的主要技术:vue3.three.js 我们先看看成品效果: 高清大图预览(会有些慢): 座机小图预览: 废话不多说, ...

  10. LOTO示波器实测过压保护芯片LP5300工作效果

      过压保护电路是电子产品设置中经常要用到的,以前都是用分立元件搭的各种经典电路,最近LOTO虚拟示波器客户推荐了一款很便宜的集成的过压保护芯片LP5300,体积很小,使用简单,外接两个电容就可以了, ...