作者:朱金灿
来源:http://blog.csdn.net/clever101

如果你问我软件开发有什么经验的话,那么我的一条经验就是:尽可能设想多种解决方案,在多种解决方案中选择一种代价较少的最优解决方案。比如今天解决了一个问题便是这条经验的一个证明。今天我将一个VC 6的工程转为VS 2008工程,在编译时遇到了问题,原因是里面用到了一个开源字符串类CStringEx,它派生自CString。CString在VC 6的实现中有一个数据成员m_pchData,在CStringEx类中自然也用到了这个数据成员。但在VS 2008中的CString的实现完全没有了m_pchData这个数据成员。VS 2008中的CString实际叫CStringT。因此在编译工程时自然而然遭遇到m_pchData未定义的错误。

因为这个工程必须用到CStringEx类,而CStringEx类的多处地方都用到了m_pchData这个成员。一开始我不知道如何想办法替代m_pchData(我大致能猜到它是表示字符串的首地址),直接的做法是自己仿照VC 6中的CString类实现一个字符串基类,然后将CStringEx类派生自该类。但是一看VC 6的CString类的实现,感觉这个解决办法代价较大,因为要用到VC底层的太多的宏和基类。虽说这个办法也能解决问题,但我想应该不是最优解决办法。我想到既然它是开源代码,在VC 6下实现,那么如果别人把它在VC 6以上的版本上编译,也必然会遇到问题,这样上网搜索说不定能找到别人提到的解决办法。于是我在google上输入:CStringEx进行搜索,果然找到一条有用的资料:

I don't like the idea of using #define to fool the compiler -- it seems to me like a hack that could easily bite you in the a$ later on down the road. i'm using VS8. so to fix CStringEx, i replaced all 22 instances of "m_pchData" with (LPTSTR)GetString(). there were three exceptions in the FindReplaceNoCase() function where i needed to replace something like sLowerThis.m_pchData with (LPTSTR)sLowerThis.GetString(). (same for sLowerSub) after i did that, my CStringEx class was happy once again ;-)

按上面说的一试,编译通过。因此在解决问题时首先应设想尽可能多的解决方法,分析各种方法的潜在风险,选择最优的解决办法。

从多种解决方案中选择最优方案相关推荐

  1. POJ1787多重背包中在最优方案下输出具体的选择方案

    https://www.cnblogs.com/ziyi--caolu/p/3211147.html https://blog.csdn.net/libin56842/article/details/ ...

  2. 帝国cms7.5电脑端手机端多终端解决方案之选择哪种方案

    制作电脑站和手机端通常有三种方式, 1.代码适配:服务程序端,即通过php动态程序,根据ua来判断来自于电脑还是手机,根据终端类型来渲染不同的模板界面;这种电脑和手机端的url是保持一致的,但程序必须 ...

  3. 【二十二】 H.266/VVC | 选择最优的仿射AMVP候选项 | xEstimateAffineAMVP函数

    /* 函数的所用:从构建的仿射AMVP候选列表中选择最优的候选项 函数的参数说明: 1.PredictionUnit& pu, 当前编码的PU 2.AffineAMVPInfo& af ...

  4. 错误 MSB8036 找不到 Windows SDK 版本8.1。请安装所需的版本的 Windows SDK 或者在项目属性页中或通过右键单击解决方案并选择“重定解决方案目标”来更改 SDK 版本。

    问题 错误 MSB8036 找不到 Windows SDK 版本8.1.请安装所需的版本的 Windows SDK 或者在项目属性页中或通过右键单击解决方案并选择"重定解决方案目标" ...

  5. Windows下一键搭建MBP系统,支持多种版本任意选择,免费永久使用,多系统使用新方案

    Windows下一键搭建MBP系统,支持多种版本任意选择,免费永久使用,多系统使用新方案. 安装起来相当的简单,简单到只需要执行一行命令即可完成.使得游戏和开发可以兼顾,并且不用花费数万米的可以使用M ...

  6. 网游UI解决方案的选择(作者 鸣·铭)

    网游UI解决方案的选择作者 鸣·铭 转载请注明出自http://www.mobilegamebase.com 由于新项目动工,UI方面需要确定方向,所以最近纠结于各种解决方案的选择.以下是对各方案的比 ...

  7. 绝了!超全面的Java调优方案,我司已用7年,并得到验证!(万能通用)

    很多程序员在工作中也会遇到类似高并发场景的问题,往往束手无策,来看下这些场景你是否似曾相识: 线上系统CPU.IO.内存突然被打满,接口响应时间过长 线上系统突然卡死无法访问,频繁收到GC报警 线上系 ...

  8. 更专业的过等保服务,华为云等保合规解决方案值得选择!

    更专业的过等保服务,华为云等保合规解决方案值得选择! 对于数字化运营的企业来说,想必对"等保合规"都不陌生.法律规定,等级保护是网络运营者的法律义务,并且在<中华人民共和国网 ...

  9. 《谈判力》读书笔记:第四章 为共同利益提供多种解决方案

    第四章 为共同利益提供多种解决方案 以色列和埃及就如何拥有西奈半岛的谈判既说明了谈判中的一个重要问题, 又显示了一个关键的机会. 问题属于人们常见的那种. 要想把馅饼切分得让双方都满意似乎不太可能. ...

最新文章

  1. PCL中outofcore模块---基于核外八叉树的大规模点云的显示
  2. CG CTF RE ReadAsm2
  3. 垃圾优先型垃圾回收器调优
  4. Ubuntu16.04 + Matlab2018+ desktop creation
  5. python截图拼接_Python实现屏幕截图有两种方式 - 小众知识
  6. php获取qzonetoken,QQ一键登录实现
  7. php改密后joomla无法登陆,php – Joomla 3.3禁用“重置密码”功能
  8. ibatis+Castle.MCV 版 NPetshop3
  9. APICACHE : Express/Node的API响应缓存中间件
  10. 音视频开发(32)---H.264/AVC 主流视频编码标准的发展
  11. linux串口对调,Linux串口调试详解
  12. ijkplayer-hook协议实现分析
  13. Win7X64位Seleniume+Eclipse+Pydev环境搭建
  14. IOS11降级到IOS10的操作方法(刷机有风险,操作需谨慎)
  15. SpringBoot RabbitMQ 异步激活_注册邮箱
  16. 还在手写记单词?使用Python开发练习英语单词,助你逆袭单词记忆王!
  17. 基于SSM+Shiro+Redis+Layui的后台管理系统
  18. 数据资产价值评估与定价:研究综述和展望
  19. Unity 抛物线 弹道(一)
  20. SpringBoot 搜索引擎 海量数据 Elasticsearch-7 es上手指南 毫秒级查询 包括 版本选型、操作内容、结果截图

热门文章

  1. Qt中 gui 模块和 widgets 模块的区别
  2. cisco服务器设置步骤_设置您自己的邮件服务器的10个步骤
  3. 务实的思维与学习–如何有意识地思考思维与学习
  4. python二级准备一个月能行吗_计算机二级选哪个?一个多月的准备时间够吗?
  5. 解析 xinetd.conf
  6. 关于srand()与rand()函数的理解-----必看系列
  7. 数据结构与算法——19. 散列函数设计方法
  8. PyQt 记住上次打开路径
  9. 先验概率、后验概率、条件概率的形象解释
  10. 阿里云域名和ip绑定最新详细步骤