精華區beta C_and_CPP 關於我們 聯絡資訊
請教各位先進一下, function pointer 最常用到的地方是在哪裡? 小弟雖然學過,但是卻從未使用過.. @@! -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.113.241.220
htorihpes:CALLBACK...MULTITHREAD... 11/29 17:00
freehaha:搭配GetProcAddress可以Call function in Library.. 11/29 18:29
> -------------------------------------------------------------------------- < 作者: UNARYvvv (有趣生活) 看板: C_and_CPP 標題: Re: [問題] function pointer 的用處 時間: Tue Nov 29 23:06:54 2005 ※ 引述《openc ()》之銘言: : 請教各位先進一下, : function pointer 最常用到的地方是在哪裡? : 小弟雖然學過,但是卻從未使用過.. @@! 舉個例子 某 BBS 站,決定使用者按鍵的動作 就是利用一個 array of function pointers 預先設定好各個字母所要執行的功能,也就是先指定個別的 function pointer 例如: KeyFunc keys[MAX_KEYNUM] ; // KeyFunc 是一種 function pointer type keys['A'] = &keyFuncA; // 可不寫 & keys['B'] = &keyFuncB; ... 這樣子在執行時讀取到一個使用者的按鍵內容 經過檢查為合法按鍵值後,便可以直接進行相關的處理動作 ( *(keys[按鍵值]) )( 引數內容 ); // 可不用寫 * 號 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 61.70.137.117 ※ 編輯: UNARYvvv 來自: 61.70.137.117 (11/29 23:08) > -------------------------------------------------------------------------- < 作者: qazq (...) 看板: C_and_CPP 標題: Re: [問題] function pointer 的用處 時間: Wed Nov 30 00:43:16 2005 ※ 引述《openc ()》之銘言: : 請教各位先進一下, : function pointer 最常用到的地方是在哪裡? : 小弟雖然學過,但是卻從未使用過.. @@! 目前我自己會用到的時機是在於,針對不同按鍵呼叫不同 function (BBS 應該都是這樣的架構) 舉個例子來說.... struct commands { int (*fptr) (); int key; }; typedef struct commands commands; int do_a(void), do_b(void), do_c(void); int main() { int ch, key; commands commandlist[] = { do_a, 'a', do_b, 'b', do_c, 'c', NULL, '\0' }; commands *commandPtr; while (1) { ch = getch(); if (ch == 'q') break; commandPtr = commandlist; for (; key = commandPtr->key, commandPtr++) if (ch == key) { commandPtr->fptr(); break; } // 用上面這樣的好處是....如果當我的按鍵對應的 function 有很多的話 // 不用 function 指標,那我可能就要寫一個很大的 switch 然後一堆 case } return 0; } int do_a() // do_b() do_c() 類似.... { printf("你按了 a 這個鍵\n"); return 0; } -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 220.140.43.139 > -------------------------------------------------------------------------- < 作者: jenallen (reborn) 看板: C_and_CPP 標題: Re: [問題] function pointer 的用處 時間: Wed Nov 30 10:50:45 2005 ※ 引述《UNARYvvv (有趣生活)》之銘言: : ※ 引述《openc ()》之銘言: : : 請教各位先進一下, : : function pointer 最常用到的地方是在哪裡? : : 小弟雖然學過,但是卻從未使用過.. @@! : 舉個例子 : 某 BBS 站,決定使用者按鍵的動作 : 就是利用一個 array of function pointers : 預先設定好各個字母所要執行的功能,也就是先指定個別的 function pointer : 例如: : KeyFunc keys[MAX_KEYNUM] ; // KeyFunc 是一種 function pointer type : keys['A'] = &keyFuncA; // 可不寫 & : keys['B'] = &keyFuncB; : ... : 這樣子在執行時讀取到一個使用者的按鍵內容 : 經過檢查為合法按鍵值後,便可以直接進行相關的處理動作 : ( *(keys[按鍵值]) )( 引數內容 ); // 可不用寫 * 號 有人整理得很好http://www.newty.de/fpt/index.html :) 我個人最常的使用時機(同時符合才行): 1. 具有一樣輸入輸出但是動作不同的functions 2. 這些functions有共同的使用時機及規範 便會考慮用function pointer將這些不同的動作封裝起來。 這樣做的優點在於可以一個function pointer便將可能所需的各式動作用一致的 表示法來處理(啊,這不就是多型的概念嗎?:P)所以可用簡潔的方式動態地執 行所需的對應動作,以避免用switch case所帶來的大規模修改。 但是缺點也不少,至少我們必須確定function pointer所指的function是我們所 規範的那個function集合才行,不然不小心invoke一個只是符合輸入輸出但卻八 竿子打不著關係的function也是枉然...:) 例子嘛,在用C寫的程式中不少,除了U大的例子外,Unix中的virtual file system, signal, callback function....很多 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.116.163.118
UNARYvvv:感謝您提供的網頁整理資料^^ 11/30 22:53