類模板深度剖析

2022-06-21 06:18:11 字數 1942 閱讀 2553

多引數類模板

類模板可以定義任意多個不同的型別引數

template

class test

;使用上述的類模板:

testt;

類模板可以被特化:即特殊化

-指定類模板的特定實現

-部分型別引數必須顯示指定

-根據型別引數分開實現類模板

template

class test

;上面的類模板可以被特化為:

template

class test

;類模板的特化型別

-部分特化:適用於特定規則約束型別引數

-完全特化:完全顯示指定型別引數

template

class test

;完全特化為:

template

< >

class test

;

#include #include 

using

namespace

std;

template

class

test

};//

部分特化

template

class test //

當test類模板的兩個型別引數完全相同時,使用這個實現

void

print()

};template

class test

};//

完全特化

template

< >

class test

};int

main()

類模板特化注意事項:

-特化只是模板的分開實現

本質上是同乙個類模板

-特化類模板的使用方式是統一的

必須顯示指定每乙個型別引數

重定義和特化的不同

-重定義

乙個類模板和乙個新類(或者兩個類模板)

使用的時候需要考慮如何選擇的問題

-特化以統一的方式使用類模板和特化類

編譯器自動優先選擇特化類

函式模板只支援型別引數完全特化

template

//函式模板定義

bool equal(t a, t b)

template

< > //函式模板完全特化

bool equal(void* a, void* b)

特化的深入理解

#include #include 

using

namespace

std;

template

< typename t1, typename t2 >

class

test

};/*

template

< >

class test < void*, void* > // 當 t1 == void* 並且 t2 == void* 時

};*/

class

test_void

};template

< typename t >

bool

equal(t a, t b)

template

< >

bool equal(double a, double

b)bool equal(double a, double

b)int

main()

工程中的建議

當需要過載函式模板時,優先考慮使用模板特化

當模板特化無法滿足需求,再使用函式過載

小結:類模板可以定義任意多個不同的型別引數

類模板可以被部分特化和完全特化

特化的本質是模板的分開實現

函式模板只支援完全特化

工程中使用模板特化代替類(函式)重定義

類模板深度剖析

類模板可以定義任意多個不同的型別引數 類模板可以被特化 指定類模板的特定實現 部分型別引數必須顯示指定 根據型別引數分開實現類模板 類模板的特化型別 部分特化 用特定規則約束型別引數 完全特化 完全顯示指定型別引數 類模板特化注意事項 特化只是模板的分開實現 本質上是同乙個類模板 特化類模板的使用方...

59 類模板深度剖析

類模板可以定義任意多個不同的型別引數 template class test public void add t1 a,t2 b 使用 testt 類模板可以被特化 指定類模板的特定實現,部分型別引數必須顯示指定,根據型別引數分開實現類模板。template class test 特化 部分 tem...

C 深度剖析教程38 類模板深度剖析

類模板可以定義任意多個不同的型別引數 類模板可以被特化 類模板的特化型別 看 include include using namespace std template typename t1,typename t2 class test template typename t1,typename t...