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

函数模板

函数模板解决通用问题,将类型当作参数设计,使用方法如下

template<typename 类型名> //类型名是代号,代指所有可利用此模板的类型

如下的Min函数

#include<iostream>
#include<typeinfo>
using namespace std;
class ST
{
public:
 ST(int _a=0):a(_a)
 {
  this->a = _a;
 }
 int operator<(const ST &t)const
 {
  return this->a < t.a ? this->a : t.a;
 }
 friend ostream& operator<<(ostream &out,const ST &t);
private:
 int a;
};
ostream& operator<<(ostream &out,const ST &t)
{
 out<<t.a;
 return out;
}
template <typename type>//函数模板1
type Min(type a, type b)
{
 cout<<typeid(a < b ? a : b).name()<<endl;
 return a < b ? a : b;
}
template <typename type1, typename type2>//函数模板2
type1 Min(type1 a, type2 b)
{
 cout<<typeid(a < b ? a : b).name()<<endl;
 return a < b ? a : b;
}
void main()
{
 cout<<Min(15, 12.1f)<<endl;
 cout<<Min<int>(11.1, 12.1)<<endl;//这里的<int>声明会让编译器以为是不完全声明<int, >,进而去使用函数模板2
 cout<<Min<int>(11.1, (int)12.1)<<endl;//然而这样就可使用函数模板1
 cout<<Min<int,int>(16, 12.1)<<endl;//尽管声明的双参数类型相同,但是只要双参数声明会直接去函数模板2,无论实际参数类型相同与否
 cout<<Min('A', 'a')<<endl;
 ST st(7),st1(6);
 cout<<Min(st, st1)<<endl;//若针对自定义类型,则需要自定义类型重载方法
}

(注:使用typename时记得引入头文件<typeinfo>)

模板不支持隐式转换,如在只存在函数模板1的时候

cout<<Min(15,12.2)<<endl;

是无法通过的,只有进行显式传递类型,

cout<<Min<int>(15,12.2)<<endl;

或者强制转换

cout<<Min(15,(int)12.2)<<endl;

或者设计不同的类型参数

即函数模板2

转载于:https://www.cnblogs.com/area-h-p/p/10335644.html

相关文章:

  • Java发布webservice应用并发送SOAP请求调用
  • .NET Core 项目指定SDK版本
  • Dockerfile 中的 CMD 与 ENTRYPOINT
  • 将golang中变量重置为零的reflect方法
  • Java虚拟机之内存模型
  • [CTSC2014]企鹅QQ
  • 单词接龙---牛客网
  • Bzoj2164 采矿(线段树+树链剖分)
  • 个位数统计
  • CF528D Fuzzy Search (生成函数+FFT)
  • c++随机数引擎
  • 《学习之道》第六章番茄工作法
  • 加密_滴答~滴
  • Ext中 grid 设置行样式
  • 技术研究 | 我所了解的物联网设备渗透手段(硬件篇)
  • Android 初级面试者拾遗(前台界面篇)之 Activity 和 Fragment
  • IE报vuex requires a Promise polyfill in this browser问题解决
  • JavaScript-Array类型
  • JS实现简单的MVC模式开发小游戏
  • Mac 鼠须管 Rime 输入法 安装五笔输入法 教程
  • 对话 CTO〡听神策数据 CTO 曹犟描绘数据分析行业的无限可能
  • 二维平面内的碰撞检测【一】
  • 个人博客开发系列:评论功能之GitHub账号OAuth授权
  • 将回调地狱按在地上摩擦的Promise
  • 聚簇索引和非聚簇索引
  • 爬虫进阶 -- 神级程序员:让你的爬虫就像人类的用户行为!
  • 如何邀请好友注册您的网站(模拟百度网盘)
  • 什么是Javascript函数节流?
  • 阿里云API、SDK和CLI应用实践方案
  • ​ 轻量应用服务器:亚马逊云科技打造全球领先的云计算解决方案
  • ​ubuntu下安装kvm虚拟机
  • !!Dom4j 学习笔记
  • #define与typedef区别
  • #设计模式#4.6 Flyweight(享元) 对象结构型模式
  • (06)金属布线——为半导体注入生命的连接
  • (12)Hive调优——count distinct去重优化
  • (13):Silverlight 2 数据与通信之WebRequest
  • (C语言)输入一个序列,判断是否为奇偶交叉数
  • (附源码)spring boot公选课在线选课系统 毕业设计 142011
  • (附源码)ssm高校社团管理系统 毕业设计 234162
  • (附源码)计算机毕业设计SSM在线影视购票系统
  • (牛客腾讯思维编程题)编码编码分组打印下标(java 版本+ C版本)
  • (学习日记)2024.03.25:UCOSIII第二十二节:系统启动流程详解
  • (学习日记)2024.04.04:UCOSIII第三十二节:计数信号量实验
  • (转)淘淘商城系列——使用Spring来管理Redis单机版和集群版
  • (转载)从 Java 代码到 Java 堆
  • ****Linux下Mysql的安装和配置
  • **CI中自动类加载的用法总结
  • .NET CORE 3.1 集成JWT鉴权和授权2
  • .net core 6 使用注解自动注入实例,无需构造注入 autowrite4net
  • .NET Core WebAPI中封装Swagger配置
  • .Net FrameWork总结
  • .NET LINQ 通常分 Syntax Query 和Syntax Method
  • .net 开发怎么实现前后端分离_前后端分离:分离式开发和一体式发布
  • .NET单元测试