C 基礎 模板基礎與函式模板

2021-10-18 18:52:23 字數 1802 閱讀 3843

求兩個int、float、char型別的資料的最大值:

c裡面要這樣寫:

int

maxint

(int x,

int y)

;double

maxdouble

(double x,

double y)

;char

maxchar

(char x,

char y)

;

c++使用函式過載(多個同名函式處理多種型別資料的語法現象)可以使得三個函式的名字一樣:

而我們期待的是下面這種型別:

單個型別引數:

template

<

typename t>

returntype function

(t para1,..

.)

在函式模板中,可以用泛型的地方包括:

1、函式返回值

2、函式引數

3、函式區域性變數

多個型別引數:

template

<

typename t,

typename s>

auto

add(t x1, s x2)

在主函式中呼叫此函式:

int

main()

編譯器根據函式呼叫的實參,生成函式模板的例項:

注意模板多型屬於靜態聯編,與函式過載屬於同一層面。

有兩種例項化方法 (確定模板實參的方法):

explicit instantiation (顯式例項化)

implicit instantiation (隱式例項化)

強制某些函式例項化,可出現於程式中模板定義後的任何位置。

template

<

typename t >

void

f( t s )

template

void f<

double

>

(double);

// 例項化,編譯器生成**

// void f(double s)

template

void f<

>

(char);

// 例項化 f(char) ,推導出模板實參

template

voidf(

int)

;// 例項化 f(int) ,推導出模板實參

編譯器檢視函式呼叫,推斷模版實參,實現隱式例項化。

#include

template

<

typename t>

void

f(t s)

intmain()

由函式模板例項化得到的函式叫做「例項函式」,由類模板例項化得到的類叫做「例項類」

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 不同的情況呢?函式過載 這意味著你至少要寫兩個以上的函式區支援你的引數型別和個數的變化,而且這種方法不支援擴充套件...

函式模板基礎

本章知識點 不按順序講解 模板的型別引數 模板的非型別引數 模板的實參推演 模板函式的過載 以上為本文講解的內容模板的特例化 專用化 模板的例項化 顯式例項化 和 隱式例項化 1.模板的型別引數 定義模板引數列表 template 型別由typename或者class指定 t 和 e是型別引數,將來...