这个问题折磨我一段时间了。在 Symbian 系统下编程,此问题显得更加是个问题,因为系统的功能也是以类的方式提供的。某些时候,由于你需要完成一些很特殊的任务,你明明知道某个类的某个成员可以很容易地帮助你实现目标,可是你却不能使用它,因为它是私有的。
当然,你也可以采用一些其他的暴力手段来解决这个问题,正如我在“暴力倾向”中所提到的那样,不过,程序看起来总归很难看。
聪明的老汉后来想到了一个办法,那就是把原来的头文件处理一下,用个文本编辑器,尤其是查找替换的功能比较强大的那种,把原来的 private 声明统统换成 public 的。
不过这样也会有点问题,首先就是很累,一个头文件一个头文件地去处理。而且,如果你安装了更新版本的 SDK,那你就需要从头再来过。
好在事情到这里已经快接近尾声了,原因很简单,老汉是个聪明的老汉。既然本质上就是干文本替换的工作,那预编译器岂不是一个更好的选择吗?
所以,老汉的终极解决方案就是,在包含头文件之前定义如下两个宏:
1 2 |
#define private public #define class struct |
有的英雄可能要问了,只定义第一个岂不是就足够?差矣!因为第一个搞不定下面这种情况:
1 2 3 4 |
class CFoo { int m_iCount; }; |
哈哈,有需求的朋友们,爽一下吧?