找回密码
 注册

QQ登录

只需一步,快速开始

函数模板

[复制链接]
发表于 2008-9-29 20:19:26 | 显示全部楼层 |阅读模式
<P>函数模板就是一个函数的模板,其中函数定义中的类型并不是实际类型,编译器可以根据函数模板和相应的实际类型来产生函数的实例(也就是函数)。</P>
; N' Z1 u5 t9 V<P><FONT color=#0000ff>重载函数模板</FONT>与重载函数有联系,因为都是重载,但这里重载的是函数模板,也就是把模板中的(形式)类型用相应的实际类型来重载,即<FONT color=#ff0000>声明一个某种类型的显式函数模板</FONT>----这样的模板中的类型就是实际类型了,当然,原来一样的类型这里也应重载为同样类型。这就可以方便地使用函数模板来处理隐式类型转换的情况了。</P>
& i( T' A2 X6 v, w3 e; q2 K<P>C++在匹配函数时遵循以下约定(也就是调用函数的"优先级"):</P>
* @( [# J1 t5 O<P><FONT color=#003399>(1)寻找一个参数完全匹配的函数,如有就用它。但是如果有多于一个这样的函数就返回出错信息。</FONT></P>
7 _$ ]3 c9 U! f3 ~3 w- t6 @<P><FONT color=#003399>(2)寻找函数模板,把它实例化成一个匹配的模板函数,如果找到了,就调用它。</FONT></P>
5 z  S/ d* L7 A$ N0 o0 M5 ?<P><FONT color=#003399>(3)如果有一个函数经过隐式类型转换可使所给参数匹配的话,就调用它。</FONT></P>
7 M8 t3 n4 O; Z9 `4 L<P><FONT color=#003399>(4)用上面的方法都找不到可调用函数时,返回出错信息。</FONT></P>" n9 ~: |2 P; t
<P><FONT color=#0000ff>函数模板的处理方法</FONT>:为了能使编译器在使用模板之间就"看到"模板,就要把它放在使用模板函数的程序段之前,所以为了确保"万无一失"并使程序简洁,一般<FONT color=#ff0000>将函数模板的声明及其实现存为一个头文件</FONT>,然后在程序中包含它就可以了。</P>
: ]& Y8 P: m- _5 d6 _<P><FONT color=#0000ff>特定的模板函数</FONT>:有时,模板实例化为某种类型的函数会产生错误的结果,比如在用指针类型作模板的参数时。这时就要另外定义一个函数实例,来对这种类型的数据进行相应处理。这个函数是专门用来<FONT color=#0000ff>替换</FONT>模板产生的<FONT color=#0000ff>实例的</FONT>,所以叫做<FONT color=#0000ff>特定模板函数</FONT>。有了这样的函数,C++编译器就优先调用它从而使模板不会产生这种类型的函数实例。这和重载函数模板不同,重载函数模板重载的是模板而不是模板产生的实例(即函数) 。 </P>
7 q6 \( y  [" t" }/ C% B<P>有几个术语要区别开来,<FONT color=#0000ff>函数模板是模板声明</FONT>,<FONT color=#0000ff>模板函数是模板实例</FONT>,<FONT color=#0000ff>特定模板函数则是替换模板实例</FONT>。</P>
: _4 U# _* J3 l. F" M<P>对于这一段内容,相应的<FONT color=#0000ff>实际运用</FONT>应该熟练掌握。</P>
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-4-15 08:43

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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