两种必须使用显示模板实参的情形
2013-05-30 10:09
239 查看
显示模板实参:
模板实参被显示指定在逗号分隔的列表中,用尖括号(<>,一个小于号和一个大于号)括起来,紧跟在函数模板实例的名字之后。例如:
就函数模板而言,以下两种情况必须指定template参数
1、当参数推演失败时,例如:
min的函数实参必须类型相同(要么都是int,要么都是unsigned int),这时因为模板参数T必须被绑定在一个类型上。从第一个函数实参推演的出的T的模板实参是unsigned
int,从第二个函数实参推演出的是int。因为对于两个函数实参,模板实参T的类型被推演成不同类型,所以模板实参推演失败,并且模板实例化也会出错误。那么这时就应该使用显示模板实参。
2、当编译器无法推演返回类型时,例如:
这时应该使用显示实参类型:
上述两种情况下,必须使用显示模板实参。
模板实参被显示指定在逗号分隔的列表中,用尖括号(<>,一个小于号和一个大于号)括起来,紧跟在函数模板实例的名字之后。例如:
min<unsigned int>(ui,1024) ;//显示指定了函数的参数类型是<unsigned int>,1024是int类型,会转成<unsigned int>
就函数模板而言,以下两种情况必须指定template参数
1、当参数推演失败时,例如:
template<class T> T min(T,T) ; //模板函数声明 unsigned int ui ; int main() { //错误:不能实例化min(unsigned int,int) //必须是min(unsigned int,unsigned int)或 //min(int,int) min(ui,1024) ; }
min的函数实参必须类型相同(要么都是int,要么都是unsigned int),这时因为模板参数T必须被绑定在一个类型上。从第一个函数实参推演的出的T的模板实参是unsigned
int,从第二个函数实参推演出的是int。因为对于两个函数实参,模板实参T的类型被推演成不同类型,所以模板实参推演失败,并且模板实例化也会出错误。那么这时就应该使用显示模板实参。
min<unsigned int>(ui,1024) ;
2、当编译器无法推演返回类型时,例如:
template<class T1,class T2,class T3> T1 sum(T2,op1,T3,op2) { /*.....*/ } void mainpulate(int (*pf)(int,char)) ; void mainpulate(double(*pf)(float,float)) ; int main() { //错误:哪一个sum的实例? //int sum(int,char)还是 //double sum(float,float) ? mainpulate(&sum) ; }
这时应该使用显示实参类型:
//取实例:double sum(float,float)的地址 //调用:void mainpulate(double(*pf)(float,float)) mainpulate(&sum<double,float,float>) ;
上述两种情况下,必须使用显示模板实参。
相关文章推荐
- 使用C++模板判断类型的两种情形
- MindManager_9.1.157使用模板时显示“参数错误”
- velocity merge作为工具类从web上下文和jar加载模板的两种常见情形
- 使用C++模板和不使用C++模板两种情况中的执行代码大小近似估计
- 使用C++模板和不使用C++模板两种情况中的执行代码大小近似估计
- 两种方法:VS2008下C++窗体程序显示控制台的方法——在QT程序中使用cout和cin
- 使用C++模板和不使用C++模板两种情况中的执行代码大小近似估计
- Qt中使用QLabel显示时间的两种方法
- android Canvas的两种使用情形
- 使用C++模板和不使用C++模板两种情况中的执行代码大小近似估计
- AndroidStudio使用之——两种方式添加类注释模板
- 使用C++模板和不使用C++模板两种情况中的执行代码大小近似估计
- 使用 glaux 显示时,必须加上 reshape 响应
- Sqlserver 中必须使用分号的两种情况--【叶子】
- 使用C++模板和不使用C++模板两种情况中的执行代码大小近似估计
- ASP.NET MVC中 使用邮件模板的两种方式
- Discuz!论坛使用模板后,横排模板不显示论坛注释如何解决?
- Thinkphp中使用display()方法显示视图模板,使用show()方法是显示文本内容
- REPEATER控件显示数据,交替项显示;分页类的使用,Repeater控件分页;使用DataList控件绑定数据;使用DataList控件的选择模板
- zabbix3.0.4使用shell脚本和zabbix自带模板两种方法添加对指定进程和端口的监控