函数模板不会进行自动的参数转换
来源:互联网 发布:淘宝虚拟专营入口 编辑:程序博客网 时间:2024/05/23 12:13
例如有求最大值的函数模板如下:
template<typename T>
T dg_max(T const &a,T const &b)
{
return (a>b?a:b);
}
但是如果此时函数调用时a,b两个参数的类型不一样怎么办呢?
比如这样调用:
int main(int argc,char *argv[])
{
using namespace std;
int a=1;
float b=2.0;
cout<<dg_max(a,b)<<endl;//1
return 0;
}
由于参数a和b的类型不一致,会产生这样的错误:
“const T gd_max(const T &,const T &)”: 模板 参数“T”不明确
解决办法一般是强制的转换成float,就像这样使用强制转换:
cout<<dg_max<flloat>(a,b)<<endl;
注意这个语句的用法不要和多参数类型的函数模板弄混了,比如这个函数模板:
template<typename T1,typename T2,typename T3>
T3 gd_max(T1 const &a,T2 const &b)
{
return (a>b?a:b);
}
在使用的时候可以注明参数类型的:cout<<dg_max<int,flloat,float>(a,b)<<endl;
这是按照T1,T2,T3的顺序排列的,也可以单独指定返回值的类型:cout<<dg_max<float>(a,b)<<endl;
这个<float>指的是返回值,由于上面的例子仅有一个参数,所以函参和返回值都是相同的,在进行类似的函数模板调用时,需要使用转换的情况下,记住定义的模板参数有几个,当定义了多个模板参数时,转换的列表中仅有一个类型,那么仅仅进行的是返回值的限定。
- 函数模板不会进行自动的参数转换
- 函数模板的模板参数自动推导探究
- OracleCommand 参数不会自动匹配
- 模板函数的默认模板参数
- 模板参数自动推导
- 模板参数自动推导
- 函数指针作为模板函数的非模板参数
- 模板类的默认模板参数、模板函数不支持默认模板参数
- C++ 模板类的默认模板参数、模板函数不支持默认模板参数
- 模板类的默认模板参数、模板函数不支持默认模板参数
- 数组作为函数参数 自动转换为同类型指针
- 带有模板参数的函数指针
- 字符串参数的模板函数推导问题
- 函数模板的数组型参数
- C++函数模板的参数推导
- 可变参数模板函数的用法
- 当数组作为函数的参数进行传递时,该数组自动退化为同类型的指针!
- C++函数局部变量不会自动初始化
- 每日一题(24)—— const
- Java对GIF的简单删帧操作
- 【IO/NIO】Java NIO浅析
- Caffe基础系列【一】MNIST数据集的测试
- hadoop系列之一集群规划篇
- 函数模板不会进行自动的参数转换
- java面试题,各大企业常见的java笔试题之五
- 泛型简介,自定义泛型的应用及泛型在Dao层的应用
- linux常用工具命令
- 1+2+3+...+n,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)
- Webstorm打开失败,提示jdk版本太低
- 数模整数规划实例
- 机器学习和数据挖掘(8):偏见方差权衡
- idea中springmvc, mybatis, gradle环境搭建