作者VictorTom (鬼翼&娃娃魚)
看板C_and_CPP
標題Re: [問題] 作為一個程式設計人員,有可以完全不碰C …
時間Sun Oct 25 23:30:38 2009
※ 引述《mahoihei (mathematic)》之銘言:
: function point......我爆頭也想不到有什麼用。。。
: ※ 編輯: mahoihei 來自: 119.236.211.97 (10/25 22:22)
正好小弟工作寫driver有用到function pointer(in C)
所以簡單回個文寫一下我自己工作上會用到的例子吧....
driver要做的工作, 就是和AP/OS/HW三者做溝通....
一般來說, 至少會design幾個framework來切割....
比如說對AP的部份....(略)
對OS的部份, 不同OS提供不同的Device Driver Model....
也可能需要不同的OS Callback, 或者不同接觸HW的路徑....
對HW的部份, 你可能推出不同幾代HW, 每代能力與限制都不同....
甚至是不同市場區隔的HW, 但是為了driver維護容易用同framework....
上述這些情況, 你可以在driver裡寫一堆if/else/switch甚至goto....
但是今天這個HW啟動這個driver load進OS, OS與HW就不會再變了....
driver要為這些明明不可能會變的if/else/switch浪費多少無謂CPU cycle??
更不用提driver內部如果夠模組化, 也會有相當程度可run-time抽換的部份....
把所以東西全部分開各自獨立, 與把所有東西都攪和在一起....
保證你的code會極度的難看, 也極度難以維護, 甚至難以多人修改....
至少小弟接觸到這個function pointer的用法就是....
兼具code的維護性, 彈性, 延展性, 同時執行時更有效率....
就像另外一位回文的j大, 有些東西等你學會了練習過了....
還要一點機緣, 你可能才知道這些東西到底有什麼用, 好用在哪:)
==
Edit補充一下AP端看過的用法, MS Windows上凡是超過OpenGL 1.1的功能....
全部得用GetProcAddress()搭配function pointer拿回來才能始用....
Run-Time你才能LoadLibrary要回來的東西也是同樣的道理....
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 118.165.232.71
※ 編輯: VictorTom 來自: 118.165.232.71 (10/25 23:34)
→ james732:file_operations XD 10/25 23:48
→ james732:function pointer的常見例子:thread的參數~ 10/25 23:48
→ VictorTom:人家和thread不熟啦XD 10/25 23:50
推 softwind:design pattern的state pattern 也是很好的範例 10/25 23:58