帶有模板引數的函式指標

2021-09-11 06:15:03 字數 1303 閱讀 5355

分享一下我老師大神的人工智慧教程。零基礎!通俗易懂!風趣幽默!還帶黃段子!希望你也加入到我們人工智慧的隊伍中來!

如果能定義乙個帶有模板引數的函式指標,例如:

template void (*pf)(t);

它就可以指向任何乙個帶有乙個任何型別引數的函式了。但這種語法不被編譯器支援。

可以把這種型別的指標作為乙個普通模板函式的引數來間接實現這種效果。例如:

#include #include using namespace std;#define df(func,type) / void func(type) df(a,char)df(b,short)df(c,int)df(d,double)df(e,long*)template void gx(void (*pf)(t)) int main()

上面的**中,df巨集用來產生函式。df有兩個引數,第乙個引數是函式名字,第二個引數是所要產生的函式的引數的型別。df可以產生僅有乙個引數(可以是任何型別)的函式。函式gx的引數是乙個函式指標,它指向乙個只有乙個引數的函式。這樣,雖然不能直接定義帶有模板引數的函式指標,但是可以利用函式模板來把這種指標作為函式引數。上面的**執行結果為:

a(char)

b(short)

c(int)

d(double)

e(long *)

分享一下我老師大神的人工智慧教程。零基礎!通俗易懂!風趣幽默!還帶黃段子!希望你也加入到我們人工智慧的隊伍中來!

如果能定義乙個帶有模板引數的函式指標,例如:

template void (*pf)(t);

它就可以指向任何乙個帶有乙個任何型別引數的函式了。但這種語法不被編譯器支援。

可以把這種型別的指標作為乙個普通模板函式的引數來間接實現這種效果。例如:

#include #include using namespace std;#define df(func,type) / void func(type) df(a,char)df(b,short)df(c,int)df(d,double)df(e,long*)template void gx(void (*pf)(t)) int main()

上面的**中,df巨集用來產生函式。df有兩個引數,第乙個引數是函式名字,第二個引數是所要產生的函式的引數的型別。df可以產生僅有乙個引數(可以是任何型別)的函式。函式gx的引數是乙個函式指標,它指向乙個只有乙個引數的函式。這樣,雖然不能直接定義帶有模板引數的函式指標,但是可以利用函式模板來把這種指標作為函式引數。上面的**執行結果為:

a(char)

b(short)

c(int)

d(double)

e(long *)

函式帶有引數

函式的引數 前面介紹的main函式都是不帶引數的。因此main 後的括號都是空括號。實際上,main函式可以帶引數,這個引數可以認為是 main函式的形式引數。語言規定main函式的引數只能有兩個,習慣上這兩個引數寫為argc和ar 因此,main函式的函式頭可寫為 main argc,ar 語言還...

setTimeout 傳帶有引數的函式

settimeout getprogress name,type 3000 發現getprogress函式 帶上引數 就失效了,不帶引數可以呼叫又達不到效果 解決辦法 匿名函式包裝 改成如下即可 settimeout function 3000 最近在學習jsonp原理時,遇到乙個settimeou...

C (帶有預設引數的函式引數)預設函式引數

預設引數?在c 中,允許實參的個數與形參的個數不同。在宣告函式原型時,為乙個或者多個形參指定預設值,以後呼叫這個函式時,若省略某乙個實參,c 則自動的以預設值作為相應引數的值。實列說明 includeusing namespace std int add int x 4,int y 7 int ma...