作者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)
1F:→ james732:file_operations XD 10/25 23:48
2F:→ james732:function pointer的常见例子:thread的参数~ 10/25 23:48
3F:→ VictorTom:人家和thread不熟啦XD 10/25 23:50
4F:推 softwind:design pattern的state pattern 也是很好的范例 10/25 23:58