作者tinlans ( )
看板Programming
標題Re: [問題] 請問Function pointer陣列問題
時間Thu Apr 3 16:15:30 2008
※ 引述《mingtai1 (綠豆嘉義人)》之銘言:
: 小弟有個關於指標陣列的疑問
: 書上說指標陣列常拿來做選單系統, 不同的選項會呼叫不同的function
: 今天如果code如下
: // prototype
: void fun1 (int);
: void fun2 (int);
: void fun3 (int);
: // function pointer array
: void (*f[3]) (int) = {fun1, fun2, fun3};
: 這樣是OK的
: 但是如果把fun2改成 void fun2 (int, int)
: 就會出現compile error (cannot convert from xxxxx)
: 也很明顯的是函式的signature不合
要讓 signature 和很簡單,
你不要把參數型別侷限於簡單的資料結構就可以了,
把它變成 void * 或是 struct xxx *,
整個世界就會變得不一樣。
: 所以我的疑問是
: 難道要用function pointer做到選單功能
: 每個選單功能的回傳和接收的參數數目難道都要一樣嗎?這樣一點也不彈性
寫程式遇到這種狀況,
一定有什麼突破點可以發現,
這時就要多動腦了。
: 所以我想問, 請問有沒有什麼辦法可以解這個問題?
: 讓陣列裡面每個pointer都指到一個函式
: 而且那些函式也可以有不同的回傳和接收參數數目
: 感謝!
因為會問到這種問題的本身能力應該不會太差,
我先點到 void * 和 struct xxx * 為止,
還是想不通再來問。
--
Ling-hua Tseng (uranus@it.muds.net)
Department of Computer Science, National Tsing-Hua University
Interesting: C++, Compiler, PL/PD, OS, VM, Large-scale software design
Researching: Software pipelining for VLIW architectures
Homepage:
https://it.muds.net/~uranus
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 61.230.228.185
推 avhacker:若直接給boost.function是不是會害到他XD 140.123.19.235 04/03 19:26
推 linjack:tr1/functional 解決所有問題 XDb 203.72.57.78 04/03 21:54
→ linjack:當然.. 效率會變差就是了 203.72.57.78 04/03 21:55
推 avhacker:其實效率影響很小,不要放在最核心處就好 140.123.19.235 04/04 00:30
→ tinlans:效率哪裡會變差? 61.230.228.185 04/04 15:52
推 linjack:generic function size 比原始 fptr 大 203.72.57.78 04/04 20:13
→ linjack:對於 generic function,func call 的數量 203.72.57.78 04/04 20:13
→ linjack:也比直接的 fptr 多,應該吧 @@" 203.72.57.78 04/04 20:14
→ linjack:還是我哪裡有搞錯 @_@ (其實我很少用傳統 203.72.57.78 04/04 20:15
→ linjack:fptr..都是瘋狂使用 tr1/functional了XD ) 203.72.57.78 04/04 20:15
→ tinlans:你顧慮的其實 inline + IPA 都可以解決的 61.230.228.185 04/04 21:24
推 linjack:哦,I see,多謝指點 <(_ _)> 203.72.57.78 04/04 21:46