C 的模板理解

2021-08-19 23:17:52 字數 2263 閱讀 1562

2、非型別模板引數

1.1、模板的概念

模板就是生成乙個通用的函式,這個函式可以接受任意資料型別的引數,可以返回任意型別的值。

模板是泛型程式設計的基礎。所謂泛型程式設計就是編寫與型別無關的邏輯**,是一種強大的復用方式。

1.2、模板的分類

1.2.1、模板函式

template1 , class 形參2,...>

返回型別 函式名(形參表)

template1 , typename 形參2,...>

返回型別 函式名(形參表)

模板形參定義class和typename是完全等價的,沒有區別,所以你可以任意使用,但是不要兩個混搭,讓人看著不舒服。

eg:

void swap(int

*x1,int

*x2)

void swap(int

**x1, int

**x2)

int main()

根據上面例子看出:當你想進行兩個整型交換時,是不是要寫乙個交換函式,當你想交換兩個指標,又要寫乙個交換函式,那麼你想交換兩個字串是不是又要寫,為了解決這種麻煩,c++有了模板的這個概念,

templatevoid swap(t *x1, t* x2)

這就是模板,它不關注你具體需要的型別,它會根據你的需求確定不同的函式型別執行不同的**(這叫做模板函式例項化)。並且在c++庫中交換函式swap也是用模板實現的。

重要的一點:編譯時不會編譯模板函式大括號裡面的內容,那是因為模板函式還沒有例項化,因為不知道函式形參型別,所以根本不能在堆疊上開闢空間。

//例項化呼叫

1.2.2、模板類

template1, class 形參名2, ...,class 形參名n>

class 類名

;

templateclass a

protected:

t _a;

};int main()

2.1、定義
模板引數不僅可以定義為型別還可以定義為固定型別的常量值。

2.2、例子

模板類與模板函式都可以用非型別形參。

template

void sum(t a,int n)

cout

<< sum << endl;

}template

class seqlist

;void test()

2.3、使用規則

template

class list

};

const

int num1 = 9; ;//全域性變數

static

int num2= 9; ;//全域性變數

void test()

//再看乙個關於指標和字串比較特別的例子

template

const* name>

class pointer

; char a = "aa";;//全域性變數

char *b = "aa";//全域性變數

char *const c = "aa";//全域性變數,頂層指標,指標常量

void test()

C 模板的理解

泛型程式設計 函式模板 函式模板與型別無關,在使用時被引數化,根據實參型別產生函式的特定型別版本。templatevoid swap t left,t right int main 模板例項化 隱式例項化 templateadd const t left,const t right int main...

理解C 模板

模板就是實現 重用機制的一種工具,模板通常在較大的 庫中使用,目的是實現 的可重用性和程式的靈活性。它可以實現型別引數化,即把型別定義為引數,從而實現了真正的 可重用性。模版可以分為兩類,乙個是函式模版,另外乙個是類模版。宣告方式 t是乙個模板引數,它接受不同的資料型別 如int,float等 而c...

C 學習8 模板初步理解

類模板是在類的定義時,不能確定成員的型別時,為了防止 的冗餘,用t代替。t是乙個型別,告訴編譯器,型別還沒有繫結,不知道現在是什麼型別。使用的時候,類名後要用尖括號把型別名括起來。complex int a 1,2 complex double a 1.0,2.0 當編譯時,編譯器看到了使用者的t是...