最近做OpenGL的图形编程(基于GLUT库),感觉OpenGL里的好多东西都是固定的,所以先前做了一个模板,以后编图形代码时,直接套用模板就好了,但是后来又觉得这不太合服自己一向的编程思想(OOP嘛),所以打算把这些图形代码封装成一个类,以后就可以直接继承调用了。
在封装的过程中,最大的一个问题就是回调函数和虚函数的冲突,图形API只能接受 static 的类成员函数,而我封装的目标就是为了以后继承重写类方法,问题一下就变得很复杂,在网上找了些资料,发现有些方法就可以实现回调用成员函数,我用了其中一种比较成熟的 Thunk 技术,回调非静态成员函数成功,还没有喜多久,就发现新的问题,那就是是在回调无参的成员函数成功,但是带参的成员函数则运行时异常,目前尚未解决。
其实要是直接用个静态类做了外壳封装,也可以解决问题,之前老感觉总是很别扭、累赘,不想这样做,但没有办法还是这样封装了,完成后,感觉封装的还可以,没有自己想的那么坏,继承、调用都非常的清晰,达到目的了,呵呵。
还对 Thunk 技术不死心,有空的时候再研究研究......