c 函式模板與函式指標

2021-09-03 01:28:42 字數 3005 閱讀 6220

1、概念:與資料項相似,函式也有位址,函式的位址是儲存其機器語言**的記憶體的開始位址。獲取函式的位址很簡單:只要使用函式名(後面不跟引數)即可。也就是說,如果think()是乙個函式,則think就是該函式的位址。要將函式作為引數進行傳遞,必須傳遞函式名。(《c++ primer plus 中文版》(第五版 p216))

2、宣告函式指標:double(*pf)(int),即宣告了乙個函式指標,這個指標指向的函式是:引數為int,返回值為:double

3、賦值和呼叫

#include

using namespace std;

double

func

(int a)

intmain()

// 輸出10

或用typedef定義

#include

using namespace std;

typedef

double

(*p)

(int);

double

func

(int a)

intmain()

// 輸出10

注:上面的例子中,p(10)和(*p)(10)等價。可以使用函式模板對函式指標進行初始化或賦值,這樣做的時候,編譯器使用指標的型別例項化具有適當模板實參的模板版本(《c++ primer 中文版》(第四版 p539))這句話我看了好幾遍,寫的實在太難理解了,我的理解:用函式模板對函式指標進行初始化或賦值的時候,編譯器就可以找乙個合適的函式進行呼叫。。。。
/*

* 下面這個例子是說,func裡面要傳遞不同的引數,但是在執行裡面**之前,要先判斷傳進來的引數的大小

* 如果把函式模板放入兩個函式,然後進行過載,會出現**的部分冗餘,因此這裡考慮用模板把公共操作提出來

*/#include

#include

#include

using namespace std;

// 定義乙個函式模板

template

intcompare

(const t &t1,

const t &t2)

// 兩個同名的函式,第乙個引數都是函式指標

void

func

(int

(*f)

(const

int&a,

const

int&b)

,int a,

int b)

void

func

(int

(*f)

(const

double

&a,const

double

&b),

double a,

double b)

intmain()

/*int 2

double 1

*/

1、包含編譯模型:編譯器必須看到用到的所有模板的定義。一般而言,可以通過在宣告函式模板或類模板的標頭檔案中新增一條 #include 指示使定義可用,如下:

main.cpp

/*

* 下面這個例子是說,func裡面要傳遞不同的引數,但是在執行裡面**之前,要先判斷傳進來的引數的大小

* 如果把函式模板放入兩個函式,然後進行過載,會出現**的部分冗餘,因此這裡考慮用模板把公共操作提出來

*/#include

#include

#include

#include

"new_h.h"

using namespace std;

// 定義乙個函式模板

intmain()

/*int 2

double 1

*/

new_h.h
#ifndef new_h_h

#define new_h_h

#include

using namespace std;

void

show()

;#include

"learn_temp.cpp"

template

intcompare

(const t&

,const t&);

void

func

(int

(*f)

(const

int&a,

const

int&b)

,int a,

int b)

;void

func

(int

(*f)

(const

double

&a,const

double

&b),

double a,

double b)

;#endif

learn_temp.cpp
template 

intcompare

(const t&a,

const t&b)

test1.cpp
#include

"new_h.h"

void

show()

void

func

(int

(*f)

(const

int&a,

const

int&b)

,int a,

int b)

void

func

(int

(*f)

(const

double

&a,const

double

&b),

double a,

double b)

結果:
int 2

double 1

show

show

函式模板與模板函式

1.函式模板的宣告和模板函式的生成 1.1函式模板的宣告 函式模板可以用來建立乙個通用的函式,以支援多種不同的形參,避免過載函式的函式體重複設計。它的最大特點是把函式使用的資料型別作為引數。函式模板的宣告形式為 template 返回型別 函式名 參數列 其中,template是定義模板函式的關鍵字...

C 函式模板與普通函式

當我們要對不同的資料型別進行同樣的操作的時候,我們可能要分別編寫幾個函式去對應資料型別進行相似的操作,比如說交換兩個資料 我們使用函式模板就會大大提高效率 示例 include using namespace std template typename t 宣告乙個模板,t是乙個通用資料型別 或te...

C 函式模板與類模板

一 函式模板 1 函式模板 建立乙個通用函式,其函式型別和形參型別不具體指定,用乙個虛擬型別來代表這個通用函式來代表。凡是函式體相同的函式都可以用這個模板來代替,不必定義多個函式,只需在模板中定義一次即可。在呼叫函式時系統會根據實參的型別來取代模板中虛擬的型別,從而實現不同函式的功能。作用 功能相同...