对function pointer的应用可以大致看出一个程序员对C的理解和驾驭能力。用function pointer甚至可以实现一部分OO才有的polymorphism,但钟情于使用function pointer会使程序的静态分析变得难以下手;类似于C++,过多的object互相纠缠,导致程序的运行期行为异常复杂。这时候,对程序的debug从流程切换到了单个class,从function call到了每个class必须具备的良好接口和实现。
就与network programming相关的程序来说,由于充斥着异步操作,state machine就成为了必然的选择。但如何实现这个state machine却有很多讲究。一般情况下,有if-then-else和callback function这两种实现手法。
if-then-else的实现对于小一点的state machine,可以起到简化程序的作用。几个state放在一起,在最顶层的function中一览无余;但只要程序稍微大一点,这种手法就会变得非常累赘。如果使用OO语言,GOF中的State(clause 5.8) pattern可以说是一个非常好的解决方法。如果没有OO语言可以用,或者使用OO有其他负担难以承受,function callback就成了救命稻草。
其实callback function就是在手工实现OO中的polymorphism罢了。