c 基礎學習13 c 的函式模板

2021-06-25 12:53:35 字數 1111 閱讀 3010

例:

c++中如何交換兩個變數的值?

void swap(int& a,int& b)

void swap(float& a,float& b)

void swap(char*& a,char*& b)

這三個函式除了型別不同,函式體都相同,那麼如何解決**的冗餘問題呢?

下面提出了泛型程式設計的概念:

不考慮具體資料型別的程式設計模式。

對於swap函式可以考慮下面的泛型寫法

void swap(t& a,t& b)

這裡面的t不是乙個具體的資料型別,而是泛指任意的資料型別。

提供一種特殊的函式可用不同型別盡心呼叫。

看起來和普通函式很相似,區別是型別可被引數化。

templatevoid swap(t& a,t& b)

函式模板的語法規則

template關鍵字用於宣告開始進行泛型程式設計。

typename關鍵字用於宣告泛指型別。

函式模板的作用域:

離他最近的函式或者類。

函式模板的應用:

自動型別推倒應用。

具體型別顯示呼叫。

#include #include using namespace std;

templatevoid swap(t& a, t& b)

void swap (char* a, char* b)

int main(int argc, char *argv)

templatet max(t a, t b)

templatet max(t a, t b, t c)

呼叫的時候必須顯示指定返回值型別,引數型別可以自動推倒,但是不能進行自動型別轉換。

cout<('a',100.0f)<('a',100.0f)《多個型別引數的模板可以進行自動型別推導嗎?

當宣告的型別引數為返回值型別時,無法進行自動型別推導。

4,函式模板可以被過載。

5,當為顯示指定呼叫的函式模板時,c++編譯器優先考慮普通函式。

C 函式模板基礎學習

1.template引數定義中,typename 和class 可以互換,盡量使用typename,不可以使用struct 2.模板引數可以使用任意型別,包括內建型別,自定義類,列舉等 3.模板引數名稱可以使用任意名稱 4.函式模板不是只編譯乙份滿足多重需要,而是為每一種例項化型別編譯乙份 5.只有...

c 函式模板基礎

1.為什麼會有函式模板 includeusing namespace std 函式的業務邏輯一樣,函式的引數型別不一樣,比如說交換變數的值,變數可以是int型別,也可以是char型別,還可以是double型別 void myswap01 int a,int b void myswap02 char ...

C 基礎 函式模板

模板用於生成不同的東西 函式或者類 在c 中有函式模板和類模板。場景 當我們需要自己實現print函式時,怎麼處理傳入引數型別 double int char,short string 不同的情況呢?函式過載 這意味著你至少要寫兩個以上的函式區支援你的引數型別和個數的變化,而且這種方法不支援擴充套件...