C 函式模板的侷限性以及解決方法(模板的特化)

2021-10-06 16:44:49 字數 1100 閱讀 7222

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...