c++ template 学习之一:模板参数
2016-01-11 09:44
351 查看
分析下面语句的缺点:
template<typename T1,typename T2>
inline T1 max(T1 const& a,T2 const & b)
{
return a<b?b:a;
}
......
max(4,4.2);
以上语句是给max传递两个不同类型的好方法。
缺点一:对于返回类型,如果使用的是其中的一个参数类型,那么另一个实参可能要转型为返回类型,而不会在意代码的用途,返回值取决于调用实参的顺序。
缺点二:把第二个参数转型为返回类型的过程将会创建一个新的局部临时对象,这导致了不能通过引用来返回结果。
修改方式一:显示指定所有参数实例
template<typename T1,typename T2,typename RT>
inline RT max(T1 const& a,T2 const & b)
{
return a<b?b:a;
}
.............
max<int ,double,double>(4,4.2); //程序正确,但调用会很麻烦
修改方式二:显示指定第一个实参,让演绎过程推导出其余的实参
template<typename RT, typename T1,typename T2>
inline RT max(T1 const& a,T2 const & b)
{
return a<b?b:a;
}
.............
max<double>(4,4.2);
template<typename T1,typename T2>
inline T1 max(T1 const& a,T2 const & b)
{
return a<b?b:a;
}
......
max(4,4.2);
以上语句是给max传递两个不同类型的好方法。
缺点一:对于返回类型,如果使用的是其中的一个参数类型,那么另一个实参可能要转型为返回类型,而不会在意代码的用途,返回值取决于调用实参的顺序。
缺点二:把第二个参数转型为返回类型的过程将会创建一个新的局部临时对象,这导致了不能通过引用来返回结果。
修改方式一:显示指定所有参数实例
template<typename T1,typename T2,typename RT>
inline RT max(T1 const& a,T2 const & b)
{
return a<b?b:a;
}
.............
max<int ,double,double>(4,4.2); //程序正确,但调用会很麻烦
修改方式二:显示指定第一个实参,让演绎过程推导出其余的实参
template<typename RT, typename T1,typename T2>
inline RT max(T1 const& a,T2 const & b)
{
return a<b?b:a;
}
.............
max<double>(4,4.2);
相关文章推荐
- myTemplate模板引擎
- 动态ItemTemplate的实现(译) - item,template
- 使Ext的Template可以解析二层的json数据的方法
- c++中template对字符串的处理方法
- python的Template使用指南
- go语言template用法实例
- Blade模板命令集
- C++ Template中防止使用不完整类型
- 在 vSphere Client 中从模板部署虚拟机
- __declspec(selectany)
- 关于Camel In Action 的理解
- Template Method 模式
- 原 初学angularJS笔记之Directive
- 初学算法-基于最小堆的优先级队列C++实现
- 如何使用模板类基类中的结构体?
- jmsTemplate 使用。
- 模板继承【粗翻译】
- 关于模板的思考
- Beautiful template (for pages)
- CPP-Templates