成都网站建设设计

将想法与焦点和您一起共享

【C++语法】templates-创新互联

template 背景

为适应如下代码,提高代码重用性(静态多态)而出现

成都创新互联主营织金网站建设的网络公司,主营网站建设方案,成都APP应用开发,织金h5小程序制作搭建,织金网站营销推广欢迎织金等地区企业咨询
int Mymax(int x, int y){return x >y ? x : y;
}
double Mymax(double x, double y){return x >y ? x : y;
}

模板写法如下:

template// or templateT Mymax(T x, T y){return x >y ? x : y;
}
函数模板与普通函数的调用顺序
  1. 模板函数可像普通函数一样重载
// 定义一个名为 Mymax 的普通函数
int Mymax(int x, int y){return x >y ? x : y;
}
  1. 调用机制:当函数模板与普通函数发生重载时,优先匹配普通函数,当函数模板产生一个比普通函数更好的相匹配的模板函数,则调用该模板函数
Mymax(5, 10); // int Mymax(int, int) // 优先匹配
Mymax(5, 10.5); // int Mymax(int, int)  // 优先匹配(参数自动类型转换)
Mymax(5.5, 10); // int Mymax(int, int)  // 优先匹配(参数自动类型转换)
Mymax(5.5, 10.5); // T Mymax(T, T) // 模板函数double Mymax(double,double)最优
// 注: 以上4条调用在没有函数模板的情况下依旧匹配成功,均调用int Mymax(int, int)函数
  1. 若想略过普通函数直接调用模板函数,调用方式

函数名<[指定类型]>(实参列表); // []内为可省内容

Mymax<>(5, 10); // 模板函数 int
Mymax<>(5, 10.5); //error
Mymax<>(5.5, 10); // error : no matching function for call to 'Mymax(double, int)'
Mymax<>(5.5, 10.5); // 模板函数 double 
Mymax(5.5, 10.5); // 模板函数 int ,输出 10
扩展

普通函数支持类型自动转换匹配,模板函数必须严格匹配

templateT Mymax(T x, S y){return x >y ?  x : y;
}
Mymax(25, 26.3); // T Mymax(T, S) // cout :  26
Mymax(25.5, 26.3); // T Mymax(T, S) // cout : 26
Mymax(25, 26); // int Mymax(int, int)
// 这两个模板函数不可重载,只有函数类型不同,会产生ambiguous
templateS Mymax(T x, S y){return x >y ? x : y;
}
Mymax(25, 26.3); // S Mymax(T, S) // cout<< 26.3
Mymax(25.5, 26.3); // S Mymax(T, S) // cout<< 26.3

你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧


网页名称:【C++语法】templates-创新互联
文章路径:http://chengdu.cdxwcx.cn/article/phoed.html