類模板的特化和函式模板的過載與類模板的繼承

2021-06-16 22:48:51 字數 1306 閱讀 8609

類似於函式模板的特化,類模板的特化也是在類模板定義以後,用template來說明乙個模板的特化型別,特化的類模板甚至可以定義新的資料成員和成員函式,下面就是乙個類模板特化的例子:

#include

template

class a

t compute()

template<> class a

int compute()

void f(){}

int main(void){

ada(1.1);

aia(2);

printf("%f\n", da.compute());

printf("%d\n", ia.compute());

return 0;

執行結果:

specialization!

1.210000

模板也提供了函式模板過載的功能,只要定義同名的函式模板,具有不同的返回值型別和形參不同,就實現了了函式模板的過載,編譯器會在呼叫函式,自動選擇對應的函式模板例項化和呼叫.範例如下:

#include

template

void func(t a){

printf("func(t)\n");

template

int func(t1 t1, t2 t2){

printf("func(t1,t2)\n");

return 1;

int main(void){

func(1, 2);

func(3);

return 0;

執行結果:

func(t1,t2)

func(t)

於函式模板支援過載一樣,類模板也支援繼承機制.和普通的類繼承一樣我們可以在繼承類裡面新增新的成員變數和成員函式.範例如下:

#include

template

class a{

public:

void func(t a){

printf("a:func(t)\n");

template

class b: public a{

public:

void func(t1 t1, t2 t2){

printf("b:func(t1,t2)\n");

int main(void){

bb;b.func(1, 1.2);

aa=static_cast>(b);

a.func(2);

return 0;

執行結果:

b:func(t1,t2)

a:func(t)

C 中的模板特化及函式模板特化和函式過載的對比

template classt1,class t2 class test 上面是一段普通模板類的 1.1全特化 template 全特化template中缺寫 class test char int 1.2.偏特化 template class t1 偏特化template缺掉要例項的那個型別 cl...

函式模板的特化

函式模板的特化 該定義中乙個或多個模板形參的實際型別或實際值是指定的。特化形式如下 關鍵字template後面接一對空的尖括號 再接模板名和一對尖括號,及括號中指定這個特化定義的模板形參 函式形參表 函式體 template int compare const char const v1,const...

函式模板的特化

include include using namespace std 泛型版本 template int compare const t v1,const t v2 為實參型別 const char 提供特化版本 template int compare const char const v1,c...