看板 Programming 關於我們 聯絡資訊
※ 引述《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