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

函数模板

函数模板

函数模板是什么?

函数就像一个蛋糕模具,你放进去什么材料,就做出来什么样的蛋糕
本来我们要是想要创建一个比大小的函数,那么肯定需要把类型分开

int compare(int a,int b)
char compare(char a,char b)

函数模板的作用就是,通过写一个通用函数模板,让编译器自行检测调用的类型,然后再生成并调用对应类型版本的函数

template<typename T>         //template:声明模板参数  typename:告诉编译器T是一个类型名

简单函数模板使用

template<typename T>
T compare(T a, T b) {return a > b ? a : b;
}
int main() {int a = 1, b = 2;cout<<"int类型最大值为"<<compare(a, b)<<endl;char x = 'a', y = 'b';cout << "char类型最大值为" << compare(a, b)<<endl;
}

输出

int类型最大值为2
char类型最大值为2

函数模板可以有多个

template<typename T1,typename T2>
T1 add(T1 a, T2 b) {return a + b; 
}int main() {cout << add(10, 3.14) << endl;
}

重载和模板一起使用

#include <iostream>
using namespace std;template <typename T> 
T max_generic(T a, T b) {       //普通函数模板cout << "调用通用模板:";return a > b ? a : b;
}
int max_generic(int a, int b, int c) {     //函数重载cout << "调用3个int的重载函数:";return max_generic(max_generic(a, b), c);
}
int max_generic(int arr[], int len) {       //函数重载2cout << "调用int数组的重载函数:";int max_val = arr[0];for (int i = 1; i < len; i++) {max_val = max_generic(max_val, arr[i]);}return max_val;
}
int main() {cout << max_generic('a', 'b') << endl;cout << max_generic(3.14, 5.67) << endl;cout << max_generic(1, 9, 5) << endl;int arr[] = { 12, 45, 7, 33 };cout << max_generic(arr, 4) << endl;
}

输出

调用通用模板:b
调用通用模板:5.67
调用3个int的重载函数:调用通用模板:调用通用模板:9
调用int数组的重载函数:调用通用模板:调用通用模板:调用通用模板:45

编译器优先使用哪个版本?

#include <iostream>
#include <cstring>
using namespace std;// 1. 普通函数:int类型精确匹配
int max_val(int a, int b) {cout << "普通函数(int):";return a > b ? a : b;
}
// 2. 通用模板
template <typename T>
T max_val(T a, T b) {cout << "通用模板:";return a > b ? a : b;
}
// 3. 显式具体化:const char*类型
template <>
const char* max_val(const char* a, const char* b) {cout << "显式具体化(const char*):";return strcmp(a, b) > 0 ? a : b;
}
int main() {// 优先级1:匹配普通函数的int精确匹配cout << max_val(10, 20) << endl;// 优先级2:匹配显式具体化的const char*精确匹配cout << max_val("apple", "banana") << endl;// 优先级3:匹配通用模板的隐式实例化(double精确匹配)cout << max_val(1.1, 2.2) << endl;// 优先级4:普通函数的隐式转换(char→int,匹配普通int函数)cout << max_val('a', 'b') << endl;return 0;
}

输出

普通函数(int):20
显式具体化(const char*):banana
通用模板:2.2
通用模板:b

这个一般不难判断,直觉调用什么函数应该就是什么函数,如果感觉没有可调用的函数基本有报错,或者逻辑不明确

http://www.jsqmd.com/news/313731/

相关文章:

  • 尼帕病毒(Nipah virus)是什么?从RNA结构到实验室研究技术详解
  • 226_尚硅谷_家庭收支记账项目介绍
  • wqs 二分入门
  • 二项式反演
  • 一对多,多对一的关系
  • ir_cut打开是对应 白色滤光片吗
  • 【收藏必备】AI算法工程师月薪3万起,大厂扩招浪潮下,这份培养计划助你拿下高薪offer
  • 收藏这份大模型转型攻略:非科班也能月薪翻倍,4大核心能力助你弯道超车
  • NAT 超详细详解
  • 收藏必看!后端工程师转行AI大模型开发,这7个技能让你薪资翻倍!附全套学习资料
  • 交钥匙工程:全球化浪潮下的工程总承包模式革新与市场机遇
  • Youtube Faceless变现:多账号变现与防封指南(2026)
  • Thinkphp和Laravel+vue篮球人才球员管理系统vue
  • Thinkphp和Laravel+vue网上选课推荐系统vue前台的设计与实现_w2l3j
  • 大数据领域数据仓库的分布式数据库应用
  • 达索系统 SIMULIA 2026 新功能直通车|Abaqus HPC新功能介绍
  • Thinkphp和Laravel+vue网约车在线打车拼车管理系统
  • 从草图到智能:达索系统CATIA开启工程开发的最新AI能力
  • Thinkphp和Laravel+vue美特超市进销存管理系统_91crh
  • 大数据领域Hive的多级分桶技术解析
  • Thinkphp和Laravel+vue鞍山市职业技术学院图书借阅推荐系统 提醒 _1o9rw
  • Thinkphp和Laravel+《数字图像处理》教学课程网站(作业,视频,论坛交流)vue
  • 数据最小化原则在大数据应用中的实践
  • 从存储到CPU再到手机:一场涨价引发的科技产业链大洗牌,国产芯片要逆袭?
  • Lambda架构在推荐系统中的应用与实现
  • Thinkphp和Laravel+vue病历 Angel医院门诊在线预约挂号系统vue 科室 专家 预约
  • 运行标准:支撑运维商为客户交付可量化运行标准体系
  • 冗余告警:助力集成商为客户交付智能阈值联动告警方案
  • 【电商API】淘宝/天猫拍立淘(按图搜索商品)API 全解析
  • Python Tkinter手搓一个寄存器计算器