template
<
typename t>
//等價於
template
<
class
t>
假設有如下函式模板:
template
<
class
t>
void
f(t a, t b)
如果**實現時定義了賦值操作a = b
,但是t為陣列,這種假設就不成立了,同樣,如果裡面的語句為判斷語句if(a>b)
,但t
如果是結構體,該假設也不成立,另外如果是傳入的陣列,陣列名為位址,因此它比較的是位址,而這也不是我們所希望的操作。
總之,編寫的模板函式很可能無法處理某些型別,另一方面,有時候通用化是有意義的,但c++語法不允許這樣做。
為了解決這種問題,可以提供模板的過載,為這些特定的型別提供具體化的模板,稱為模板的特化,模板特化有時也稱之為模板的具體化。
#include
#include
using
namespace std;
class
person
string m_name;
int m_age;};
template
<
class
t>
bool
mycompare
( t &a , t &b )
return
false;}
// 通過模板特化自定義資料型別,解決上述問題
// 如果具體化能夠優先匹配,那麼就選擇具體化
// 語法 template<> 返回值 函式名《具體型別》(引數)
template
<
>
bool mycompare
(person &a, person &b)
return
false;}
void
test01()
intmain()
C 函式模板的侷限性
include include using namespace std 模板函式的侷限性 class person string m name int m age templatebool mycompare t a,t b else void test01 通過具體化自定義資料型別,來解決上述問題...
56 模板侷限性和解決方法
模板侷限性 模板不能解決所有的型別,比如陣列和結構體之類的自定義型別 如果出現不能解決的型別,可以通過第三地具體化來解決問題 template 返回值 函式名 具體型別 引數 main.cpp 42.模板.cpp 定義控制台應用程式的入口點。define crt secure no warnings...
C 模板的侷限性以及解決01
define crt secure no warnings includeusing namespace std include class person string m name int m age 通過模板進行兩個資料比較 templatebool mycompare t a,t b retu...