从多种解决方案中选择最优方案的原因,选择最佳方案的解决问题
作者:朱
资料来源:http://blog..net/clever101
如果你问我在软件开发方面有什么经验,那么我的一个经验就是:想象尽可能多的解决方案,在其中选择成本最小的最佳方案。比如今天解决了一个问题,就是这种体验的证明。今天把一个VC 6的项目转换成了VS 2008的项目,在编译的时候遇到了一些问题,因为里面使用了一个开源的字符串类CStringEx,这个类是从CString派生出来的。CString在VC 6的实现中有一个数据成员m_pchData,这个数据成员自然用在CStringEx类中。但是在VS 2008中CString的实现中,完全没有数据成员m_pchData。VS 2008中的CString其实叫CString。所以编译项目时自然会遇到m_pchData的未定义错误。
因为这个项目必须使用cstrigex类,而且cstrigex类中很多地方都使用了成员m_pchData。一开始不知道怎么找方法替换m_pchData(大概能猜到是一个字符串的第一个地址)。直接的办法是模仿VC 6中的CString类实现一个string基类,然后从这个类派生出CStringEx类。但是我看VC 6中CString类的实现,感觉这个方案成本很高,因为用了太多VC底层的宏和基类。虽然这种方法也能解决问题,但我认为不是最好的解决方案。我觉得既然是开源代码,在VC 6下实现,如果别人在VC 6以上的版本上编译,必然会遇到问题,这样在网上搜索可能会找到别人提到的解决方案。于是我在谷歌上输入:CStringEx进行搜索,果然找到了一条有用的信息:
我不喜欢用# define来愚弄编译器的想法——在我看来,这种方法很容易在以后的a中攻击你。我用的是VS8。所以为了修复CString Ex,我用(LPTSTR)GetString()替换了‘m _ PCH data’的所有22个实例。FindReplaceNoCase()函数中有三个例外,我需要用(LPTSTR)sLowerThis替换sLowerThis.m_pchData。GetString()。(sLowerSub也一样)在我这样做之后,我的CStringEx类又一次快乐起来;-)
如上所述尝试一下,编译一下。所以在解决问题的时候,首先要设想尽可能多的方案,分析每种方法的潜在风险,选择最佳方案。