作者everydate (月)
看板C_and_CPP
標題[問題] 為什麼要用 function pointer ?
時間Mon Jun 22 00:32:01 2009
各位好
想請問 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
1F:→ tinlans:當 DoMore 是這個函式的參數,可由外面傳不同的 function 06/22 00:34
2F:→ tinlans:進來時,你就會有不同的想法了。 06/22 00:34
3F:推 ianfang:你看一下qsort的prototype然後想一下為什麼要用f pointer 06/22 00:38
4F:推 legnaleurc:search "qsort" in stdlib.h 06/22 00:38
5F:→ ianfang:哈 樓上跟我在同時推一樣的東西 XD 06/22 00:39
6F:推 ledia:有可能 pt2Function = DoLess; 而要用哪個並不能現在確定 06/22 01:05
7F:推 zlw:你的前提是,在你把程式編譯之前,編譯器就已經知道DoIt這個 06/22 04:45
8F:→ zlw:函數所在的位址在哪邊,所以可以跳到該函數去執行。但實際上有 06/22 04:46
9F:→ zlw:一堆函數所在位址,要到程式執行之後才知道。所以你寫一個指標 06/22 04:46
10F:→ zlw:pfun=Getfun(); 下一行再寫pfun(1,2); 就能解決此問題。 06/22 04:47
11F:推 realmojo:C++多型的實作就是用function pointer 06/22 10:35
12F:推 stonehomelaa:很多入門書的例子:sort時傳入compare function 06/22 10:51
13F:→ stonehomelaa:這樣就能決定要大->小還是小->大 不用寫兩個sort 06/22 10:52
14F:→ gozha:C++多型不是利用virtaul mathod嗎..是C吧@@? 06/22 12:15
15F:→ weiyucsie:上面 他是說多型實作 06/22 13:01
16F:→ marcX:callback function 通常需要function pointer 06/22 16:39
17F:推 mcauther:design pattern 中的 factory 好像也可以用 06/22 22:15