找回密码
 注册

QQ登录

只需一步,快速开始

函数模板

[复制链接]
发表于 2008-9-29 20:19:26 | 显示全部楼层 |阅读模式
<P>函数模板就是一个函数的模板,其中函数定义中的类型并不是实际类型,编译器可以根据函数模板和相应的实际类型来产生函数的实例(也就是函数)。</P>  ]/ ]* c, v% r" h
<P><FONT color=#0000ff>重载函数模板</FONT>与重载函数有联系,因为都是重载,但这里重载的是函数模板,也就是把模板中的(形式)类型用相应的实际类型来重载,即<FONT color=#ff0000>声明一个某种类型的显式函数模板</FONT>----这样的模板中的类型就是实际类型了,当然,原来一样的类型这里也应重载为同样类型。这就可以方便地使用函数模板来处理隐式类型转换的情况了。</P>
1 ^5 l& g! b7 S" L# M+ c9 S( B<P>C++在匹配函数时遵循以下约定(也就是调用函数的"优先级"):</P>
% w4 S) j+ [* H! f+ t<P><FONT color=#003399>(1)寻找一个参数完全匹配的函数,如有就用它。但是如果有多于一个这样的函数就返回出错信息。</FONT></P>
1 E( F$ Y4 @( u: ]# o$ a) t2 O<P><FONT color=#003399>(2)寻找函数模板,把它实例化成一个匹配的模板函数,如果找到了,就调用它。</FONT></P>
* R% d6 w; x7 D6 N" b" Q<P><FONT color=#003399>(3)如果有一个函数经过隐式类型转换可使所给参数匹配的话,就调用它。</FONT></P>, R0 i$ k) l. P& o$ m, v5 Q
<P><FONT color=#003399>(4)用上面的方法都找不到可调用函数时,返回出错信息。</FONT></P>
5 O, N! A' V  q! {8 J5 B  u5 T<P><FONT color=#0000ff>函数模板的处理方法</FONT>:为了能使编译器在使用模板之间就"看到"模板,就要把它放在使用模板函数的程序段之前,所以为了确保"万无一失"并使程序简洁,一般<FONT color=#ff0000>将函数模板的声明及其实现存为一个头文件</FONT>,然后在程序中包含它就可以了。</P>& q: f- V0 j$ k  n6 d  ^; l. O8 L
<P><FONT color=#0000ff>特定的模板函数</FONT>:有时,模板实例化为某种类型的函数会产生错误的结果,比如在用指针类型作模板的参数时。这时就要另外定义一个函数实例,来对这种类型的数据进行相应处理。这个函数是专门用来<FONT color=#0000ff>替换</FONT>模板产生的<FONT color=#0000ff>实例的</FONT>,所以叫做<FONT color=#0000ff>特定模板函数</FONT>。有了这样的函数,C++编译器就优先调用它从而使模板不会产生这种类型的函数实例。这和重载函数模板不同,重载函数模板重载的是模板而不是模板产生的实例(即函数) 。 </P>1 s5 A$ e" `" @9 D
<P>有几个术语要区别开来,<FONT color=#0000ff>函数模板是模板声明</FONT>,<FONT color=#0000ff>模板函数是模板实例</FONT>,<FONT color=#0000ff>特定模板函数则是替换模板实例</FONT>。</P>
6 `2 B6 R+ u' c  E! Z9 h% j, }<P>对于这一段内容,相应的<FONT color=#0000ff>实际运用</FONT>应该熟练掌握。</P>
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|本地广告联系: QQ:905790666 TEL:13176190456|Archiver|手机版|小黑屋|汶上信息港 ( 鲁ICP备19052200号-1 )

GMT+8, 2025-12-15 10:16

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表