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