极客班STL与泛型编程 第一周学习笔记

泛型编程需注意的问题

续前节template简单分类
http://blog.csdn.net/s_tangbao/article/details/52212147

模板是指允许函数或类(对象)通过泛型的形式进行表现或运行。对应不同的型别(types),都可以正常工作,而无需每个型别一套程序。

实例化分为显式实例化和隐式实例化,显示实例化是指在代码中明确指明使用哪种类型进行实例化,例如前节中complex<double> c1(1.1,2.2);隐式实例化是在首次使用时根据具体情况使用一种合适的型别进行实例化。

① <>内部 typename 与 class 通用,但是此处struct不可以替换class。
template<class T>
inline
const T& min(const T&a,const T&b)
{}

等价于

template<typename T>
inline
const T& min(const T&a,const T&b)
{...}
②模板在实例化之前,要检查模板代码本身有没有语法错误;实例化期间,也要检查对模板代码的调用是否合理。
比如前节中min模板,本身没有语法问题后,在实例化时要考虑调用是否能够完成,模板中利用了operator<,故在使用min模板的类T中要考虑是否能够正确执行operator<。
③不允许自动类型转换,模板参数必须是严格匹配的。
对于 min(1,2.0);,错在于我们设定的min模板两个参数是一样的,对于不同参数,由于不能进行自动类型转化而无法执行。
可改为显式指定T型别 min<double>(1,2.0);
或强制转换参数型别 min(static_cast<double>(1),2.0);
④当非模板函数与模板函数并存,且都满足函数需求时,调用非模板函数,而不是从模板函数生成实例。
⑤类模板的成员函数的声明(复制构造函数除外)与定义,如果当中要用到本类模板类型,则要写全名。
例如
声明
定义
⑥特例化后的具体实现可以与主模板不同,例如
类模板特例化后,进行结构调整
⑦类模板可进行偏特化和设置默认参数类型
类此于普通的函数构造,类模板也可以进行默认参数类型设定;而进行偏特化即部分参数特化而部分参数使用泛型。
偏特化
设置默认参数类型
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值