c++模板


模板与泛型编程

(1)首先关于几个概念,像这样

template<class U,class V>
template<tpyename T>

上述两个关键字 class typename有完全相同过的含义,可以互换使用。

是模板的定义,下面的定义语句分别是声明函数模板

<pre name="code" class="cpp">template<tpyename T>
int compare(const T &v1,const T &v2)
template<tpyename T>
int compare2(const T &v1,const T &v2)

 

类模板与之类似。注意,我们在这里不说是模板函数,而说是函数模板,是因为实际上上述的表达就不是一个函数,而是一个可以实例化为函数的模板。我们可以看到,此时,模板不过是函数模板的一部分。(一句话,函数模板和类模板也是模板。)

就像在不同函数的形参列表中形参名字可以相同,且没有任何联系一样,不同模板可以使用相同的模板名字。就像上面所显示一样。

上面的模板中,T称为模板的类型形参,v1和v2则成为模板的非类型形参。


(2)关于泛型程序

在使用模板技术后,我们有能力编写出和类型无关的代码,我们将其称之为泛型程序。一般有下面两个原则:

a模板的形参请使用const类型的引用(因为很多类型是禁止复制的,这样在编译器试图实例化时就会出错)

b尽量减少在模板中实现中所用到的操作符。比如说可以用==和!=完成就别用<,而使用了小于号就别使用大于号了


(3)模板的编译模型(只讨论包含编译模型)

在你使用函数时,编译器只需要看到函数的声明就好了。类似的,定义对象的事后,编译器只要看到类的定义即可,所以,一般类的定义和函数的声明被放在头文件中。

然而模板则不同,当你在调用函数模板或类模板时,由于编译器需要进行实例化,所以一并需要该模板的定义。所以你必须在头文件结束时讲对应的实现cpp文件include到该头文件中。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值