[問題] 為什麼要用 function pointer ?

看板C_and_CPP (C/C++)作者 (月)時間16年前 (2009/06/22 00:32), 編輯推噓7(7010)
留言17則, 11人參與, 最新討論串1/1
各位好 想請問 function pointer 要用在什麼情況? 以及用它有什麼好處? 舉例來說 (出處 http://oopweb.com/CPP/Documents/FunctionPointers/Volume/CCPP/FPT/em_fpt.html#chapter1) // C // define a function pointer int (*pt2Function) (float, char, char); ---(1) int DoIt (float a, char b, char c) { cout << "DoIt" << endl; return a+b+c; } ---(2) pt2Function = DoMore; // assignment ---(3) // calling a function using a function pointer ---(4) int result1 = pt2Function (12, 'a', 'b'); ==> 我不懂的是,為什麼要這樣用? @@ 直接用 int result1 = DoIt(12, 'a', 'b'); ---(5) 不也可以得到 result1 為什麼要繞一個 function pointer 來得到 result1? 也許有人會說,不想用就不要用 但實際應用上,的確有人是類似這樣的用法 所以我猜它一定有什麼理由或是好處? @@ 不好意思問了笨問題 ...謝謝 ^^|| -- -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 219.70.221.213

06/22 00:34, , 1F
當 DoMore 是這個函式的參數,可由外面傳不同的 function
06/22 00:34, 1F

06/22 00:34, , 2F
進來時,你就會有不同的想法了。
06/22 00:34, 2F

06/22 00:38, , 3F
你看一下qsort的prototype然後想一下為什麼要用f pointer
06/22 00:38, 3F

06/22 00:38, , 4F
search "qsort" in stdlib.h
06/22 00:38, 4F

06/22 00:39, , 5F
哈 樓上跟我在同時推一樣的東西 XD
06/22 00:39, 5F

06/22 01:05, , 6F
有可能 pt2Function = DoLess; 而要用哪個並不能現在確定
06/22 01:05, 6F

06/22 04:45, , 7F
你的前提是,在你把程式編譯之前,編譯器就已經知道DoIt這個
06/22 04:45, 7F

06/22 04:46, , 8F
函數所在的位址在哪邊,所以可以跳到該函數去執行。但實際上有
06/22 04:46, 8F

06/22 04:46, , 9F
一堆函數所在位址,要到程式執行之後才知道。所以你寫一個指標
06/22 04:46, 9F

06/22 04:47, , 10F
pfun=Getfun(); 下一行再寫pfun(1,2); 就能解決此問題。
06/22 04:47, 10F

06/22 10:35, , 11F
C++多型的實作就是用function pointer
06/22 10:35, 11F

06/22 10:51, , 12F
很多入門書的例子:sort時傳入compare function
06/22 10:51, 12F

06/22 10:52, , 13F
這樣就能決定要大->小還是小->大 不用寫兩個sort
06/22 10:52, 13F

06/22 12:15, , 14F
C++多型不是利用virtaul mathod嗎..是C吧@@?
06/22 12:15, 14F

06/22 13:01, , 15F
上面 他是說多型實作
06/22 13:01, 15F

06/22 16:39, , 16F
callback function 通常需要function pointer
06/22 16:39, 16F

06/22 22:15, , 17F
design pattern 中的 factory 好像也可以用
06/22 22:15, 17F
文章代碼(AID): #1AFc23Hf (C_and_CPP)
文章代碼(AID): #1AFc23Hf (C_and_CPP)