﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>C++博客-只有有耐心圆满完成简单工作的人，才能够轻而易举地完成困难的事。</title><link>http://www.cppblog.com/leetaolion/</link><description>Only those who have the patience to do simple things perfectly ever acquire the skill to do difficult things easily. </description><language>zh-cn</language><lastBuildDate>Thu, 08 Jan 2009 01:50:58 GMT</lastBuildDate><pubDate>Thu, 08 Jan 2009 01:50:58 GMT</pubDate><ttl>60</ttl><item><title>【zz】设计Qt风格的C++API</title><link>http://www.cppblog.com/leetaolion/archive/2008/10/20/64478.html</link><dc:creator>创建更好的解决方案</dc:creator><author>创建更好的解决方案</author><pubDate>Mon, 20 Oct 2008 03:32:00 GMT</pubDate><guid>http://www.cppblog.com/leetaolion/archive/2008/10/20/64478.html</guid><wfw:comment>http://www.cppblog.com/leetaolion/comments/64478.html</wfw:comment><comments>http://www.cppblog.com/leetaolion/archive/2008/10/20/64478.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/leetaolion/comments/commentRss/64478.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/leetaolion/services/trackbacks/64478.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 在奇趣（Trolltech），为了改进Qt的开发体验，我们做了大量的研究。这篇文章里，我打算分享一些我们的发现，以及一些我们在设计Qt4时用到的原则，并且展示如何把这些原则应用到你的代码里。 <br><br>好的API的六个特性 <br>便利陷阱 <br>布尔参数陷阱 <br>静态多态 <br>命名的艺术 <br>指针还是引用？ <br>例子：QProgressBar <br>如何把API设计好 &nbsp;&nbsp;<a href='http://www.cppblog.com/leetaolion/archive/2008/10/20/64478.html'>阅读全文</a><img src ="http://www.cppblog.com/leetaolion/aggbug/64478.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/leetaolion/" target="_blank">创建更好的解决方案</a> 2008-10-20 11:32 <a href="http://www.cppblog.com/leetaolion/archive/2008/10/20/64478.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>BCB的两个问题</title><link>http://www.cppblog.com/leetaolion/archive/2008/09/22/62519.html</link><dc:creator>创建更好的解决方案</dc:creator><author>创建更好的解决方案</author><pubDate>Mon, 22 Sep 2008 10:49:00 GMT</pubDate><guid>http://www.cppblog.com/leetaolion/archive/2008/09/22/62519.html</guid><wfw:comment>http://www.cppblog.com/leetaolion/comments/62519.html</wfw:comment><comments>http://www.cppblog.com/leetaolion/archive/2008/09/22/62519.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/leetaolion/comments/commentRss/62519.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/leetaolion/services/trackbacks/62519.html</trackback:ping><description><![CDATA[其一：对BCB自己提供的数据类型支持有问题，当布置成DLL的时候，多个DLL之间传递TAction时，东西丢的一塌糊涂。<br><br>其二：对BCB自己提供的标准控件支持有问题，尤其是动态特性有很大的问题，比如你通过Add()把创建好的TMenuItem加到MainMenu上，很奇怪，本来唯一的MenuIndex重复的一塌糊涂，导致MenuItem位置左右乱跳。<br><br>要做动态配置的，别选BCB，这方面太弱。
<img src ="http://www.cppblog.com/leetaolion/aggbug/62519.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/leetaolion/" target="_blank">创建更好的解决方案</a> 2008-09-22 18:49 <a href="http://www.cppblog.com/leetaolion/archive/2008/09/22/62519.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>狗，哈士奇，跳蚤，继承，聚合，UpCast和DownCast</title><link>http://www.cppblog.com/leetaolion/archive/2008/09/20/62344.html</link><dc:creator>创建更好的解决方案</dc:creator><author>创建更好的解决方案</author><pubDate>Sat, 20 Sep 2008 03:22:00 GMT</pubDate><guid>http://www.cppblog.com/leetaolion/archive/2008/09/20/62344.html</guid><wfw:comment>http://www.cppblog.com/leetaolion/comments/62344.html</wfw:comment><comments>http://www.cppblog.com/leetaolion/archive/2008/09/20/62344.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.cppblog.com/leetaolion/comments/commentRss/62344.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/leetaolion/services/trackbacks/62344.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 验证了结果是：指向子类对象的父类指针，在做DownCast时，不会因为自身是父类指针而使DownCast出的子类对象指针发生缺失，连一只虱子、跳蚤都不会少。&nbsp;&nbsp;<a href='http://www.cppblog.com/leetaolion/archive/2008/09/20/62344.html'>阅读全文</a><img src ="http://www.cppblog.com/leetaolion/aggbug/62344.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/leetaolion/" target="_blank">创建更好的解决方案</a> 2008-09-20 11:22 <a href="http://www.cppblog.com/leetaolion/archive/2008/09/20/62344.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>discuz6.1主流插件使用心得（首页N格、人数作弊、GIS、友链横排、自动注册）</title><link>http://www.cppblog.com/leetaolion/archive/2008/08/27/60090.html</link><dc:creator>创建更好的解决方案</dc:creator><author>创建更好的解决方案</author><pubDate>Tue, 26 Aug 2008 16:11:00 GMT</pubDate><guid>http://www.cppblog.com/leetaolion/archive/2008/08/27/60090.html</guid><wfw:comment>http://www.cppblog.com/leetaolion/comments/60090.html</wfw:comment><comments>http://www.cppblog.com/leetaolion/archive/2008/08/27/60090.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/leetaolion/comments/commentRss/60090.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/leetaolion/services/trackbacks/60090.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 小站T恤吧转到discuz阵营后，先后使用过多个插件<br>包括热的一塌糊涂的首页N格、人数作弊、GIS、友情链接横排美化、自动注册等，现总结心得如下：<br>现在还保留的是GIS和友情链接横排，效果的话参见T恤吧http://www.teexu8.cn<br>按照添加的顺序说吧：&nbsp;&nbsp;<a href='http://www.cppblog.com/leetaolion/archive/2008/08/27/60090.html'>阅读全文</a><img src ="http://www.cppblog.com/leetaolion/aggbug/60090.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/leetaolion/" target="_blank">创建更好的解决方案</a> 2008-08-27 00:11 <a href="http://www.cppblog.com/leetaolion/archive/2008/08/27/60090.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>重构故事——Chapter03</title><link>http://www.cppblog.com/leetaolion/archive/2008/08/25/59921.html</link><dc:creator>创建更好的解决方案</dc:creator><author>创建更好的解决方案</author><pubDate>Mon, 25 Aug 2008 08:14:00 GMT</pubDate><guid>http://www.cppblog.com/leetaolion/archive/2008/08/25/59921.html</guid><wfw:comment>http://www.cppblog.com/leetaolion/comments/59921.html</wfw:comment><comments>http://www.cppblog.com/leetaolion/archive/2008/08/25/59921.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/leetaolion/comments/commentRss/59921.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/leetaolion/services/trackbacks/59921.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: A计划1：平台版本在v2.1版本基础上进行迁移，逐个模块改造，平台1.0版本，在业务分支3.0版本之前发布，在3.x版本与其他业务版本结合；  <br>B计划1：平台版本不再单独演进，将现在的平台技术应用到即将发布的3.0版本中。包括插件结构、动态加载、动态激活，3.0版本中的业务模块一律按照插件规范开发。<br>// ---------------------------------------------------------------<br>A计划2：CCB管理配置文件，规范插件对主界面的配置。<br>B计划2：必须为界面配置文件准备替代方案，防止因为配置文件损坏造成的程序加载失败。&nbsp;&nbsp;<a href='http://www.cppblog.com/leetaolion/archive/2008/08/25/59921.html'>阅读全文</a><img src ="http://www.cppblog.com/leetaolion/aggbug/59921.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/leetaolion/" target="_blank">创建更好的解决方案</a> 2008-08-25 16:14 <a href="http://www.cppblog.com/leetaolion/archive/2008/08/25/59921.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>重构故事——Chapter02</title><link>http://www.cppblog.com/leetaolion/archive/2008/08/14/58856.html</link><dc:creator>创建更好的解决方案</dc:creator><author>创建更好的解决方案</author><pubDate>Thu, 14 Aug 2008 09:47:00 GMT</pubDate><guid>http://www.cppblog.com/leetaolion/archive/2008/08/14/58856.html</guid><wfw:comment>http://www.cppblog.com/leetaolion/comments/58856.html</wfw:comment><comments>http://www.cppblog.com/leetaolion/archive/2008/08/14/58856.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/leetaolion/comments/commentRss/58856.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/leetaolion/services/trackbacks/58856.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 很多模块都需要在工程打开之时，获取一定的信息，比如工程是新建的还是打开的，临时目录在哪里，工程目录又在哪里。<br>工程管理模块就像个奶妈，把一系列的信息从XML文件或者从用户刚刚输入的信息都进来，然后再一个个的去NotifyProjectOpen。工程关闭之时在挨个通知他们要关灯了，NotifyProjectClose。怪不得耦合度高啊，全是被动式初始化，能不高吗？&nbsp;&nbsp;<a href='http://www.cppblog.com/leetaolion/archive/2008/08/14/58856.html'>阅读全文</a><img src ="http://www.cppblog.com/leetaolion/aggbug/58856.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/leetaolion/" target="_blank">创建更好的解决方案</a> 2008-08-14 17:47 <a href="http://www.cppblog.com/leetaolion/archive/2008/08/14/58856.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>重构故事——Chapter01</title><link>http://www.cppblog.com/leetaolion/archive/2008/08/07/58278.html</link><dc:creator>创建更好的解决方案</dc:creator><author>创建更好的解决方案</author><pubDate>Thu, 07 Aug 2008 12:17:00 GMT</pubDate><guid>http://www.cppblog.com/leetaolion/archive/2008/08/07/58278.html</guid><wfw:comment>http://www.cppblog.com/leetaolion/comments/58278.html</wfw:comment><comments>http://www.cppblog.com/leetaolion/archive/2008/08/07/58278.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.cppblog.com/leetaolion/comments/commentRss/58278.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/leetaolion/services/trackbacks/58278.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 比较头痛的是：原来在工程管理器中一系列的通知机制的修改，神秘的GIS模块，还有混乱不堪的数据库抽象层。按照Eclipse中对插件式的描述，这些插件不但作为插头插在别的插口上，还对外提供插口。&nbsp;&nbsp;<a href='http://www.cppblog.com/leetaolion/archive/2008/08/07/58278.html'>阅读全文</a><img src ="http://www.cppblog.com/leetaolion/aggbug/58278.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/leetaolion/" target="_blank">创建更好的解决方案</a> 2008-08-07 20:17 <a href="http://www.cppblog.com/leetaolion/archive/2008/08/07/58278.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>数值转换的想当然</title><link>http://www.cppblog.com/leetaolion/archive/2008/07/30/57540.html</link><dc:creator>创建更好的解决方案</dc:creator><author>创建更好的解决方案</author><pubDate>Wed, 30 Jul 2008 09:58:00 GMT</pubDate><guid>http://www.cppblog.com/leetaolion/archive/2008/07/30/57540.html</guid><wfw:comment>http://www.cppblog.com/leetaolion/comments/57540.html</wfw:comment><comments>http://www.cppblog.com/leetaolion/archive/2008/07/30/57540.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cppblog.com/leetaolion/comments/commentRss/57540.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/leetaolion/services/trackbacks/57540.html</trackback:ping><description><![CDATA[float fTmp = 0.51<br>int iTmp = fTmp;<br><br>iTmp = ??<br><br>答案是0，相当于Floor了。<br><br>0.99也是0，但是0.9999999就是1，这是因为二进制表示十进制小数会有精度损失。<br><br>Ceil也不对，0.1也会+1。<br><br>想要四舍五入取整，选择RoundTo(fTmp, 0)。<br>
<img src ="http://www.cppblog.com/leetaolion/aggbug/57540.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/leetaolion/" target="_blank">创建更好的解决方案</a> 2008-07-30 17:58 <a href="http://www.cppblog.com/leetaolion/archive/2008/07/30/57540.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>C++ Builder实现可配置界面中遇到的问题【2、问题解决】 </title><link>http://www.cppblog.com/leetaolion/archive/2008/07/16/56303.html</link><dc:creator>创建更好的解决方案</dc:creator><author>创建更好的解决方案</author><pubDate>Wed, 16 Jul 2008 07:19:00 GMT</pubDate><guid>http://www.cppblog.com/leetaolion/archive/2008/07/16/56303.html</guid><wfw:comment>http://www.cppblog.com/leetaolion/comments/56303.html</wfw:comment><comments>http://www.cppblog.com/leetaolion/archive/2008/07/16/56303.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/leetaolion/comments/commentRss/56303.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/leetaolion/services/trackbacks/56303.html</trackback:ping><description><![CDATA[<br>设计变更：类数量不变，因为经过分析，是因为在exe和dll之间传递VCL特有数据类型所致。<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 原先的二进制部署亦不变。<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 定义数据类型，模仿TMenuItem的形式，里面封装了id, name, caption, hint, shortcut和一个void(*pFun)()的函数指针，该指针指向DLL内部的一个非成员函数，该函数内部调用类成员函数（前提是exe中的DLLManager的LoadDLL方法创建了该类的实例）。<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; EXE的AddMenu接口接受该数据类型的参数，根据其中的资源创建TAction，TAction和pFun一并压入自身容器中，所有Action的OnExecute均指向Main中的一个可以赋值给TNotifyEvent指针的函数。<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 添加完毕，EXE执行激活操作（初始化的时候已经根据UI配置文件创建了状态为Idel的菜单）将添加的Action对号入座，激活菜单。<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;OnClick事件触发TNotifyEvent操作，遍历Exe容器，找到pFun()触发之。<br><br>问题解决！<br><br>下一步：美化界面。
<img src ="http://www.cppblog.com/leetaolion/aggbug/56303.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/leetaolion/" target="_blank">创建更好的解决方案</a> 2008-07-16 15:19 <a href="http://www.cppblog.com/leetaolion/archive/2008/07/16/56303.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>C++ Builder实现可配置界面中遇到的问题【1、问题出现】</title><link>http://www.cppblog.com/leetaolion/archive/2008/07/15/56172.html</link><dc:creator>创建更好的解决方案</dc:creator><author>创建更好的解决方案</author><pubDate>Tue, 15 Jul 2008 04:11:00 GMT</pubDate><guid>http://www.cppblog.com/leetaolion/archive/2008/07/15/56172.html</guid><wfw:comment>http://www.cppblog.com/leetaolion/comments/56172.html</wfw:comment><comments>http://www.cppblog.com/leetaolion/archive/2008/07/15/56172.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/leetaolion/comments/commentRss/56172.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/leetaolion/services/trackbacks/56172.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 提供一个可配置的界面，供DLL们来注册菜单、按钮这些界面元素，界面元素所需的资源由DLL提供。DLL们需要外显的方法，绑定到自己注册的界面元素上。&nbsp;&nbsp;<a href='http://www.cppblog.com/leetaolion/archive/2008/07/15/56172.html'>阅读全文</a><img src ="http://www.cppblog.com/leetaolion/aggbug/56172.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/leetaolion/" target="_blank">创建更好的解决方案</a> 2008-07-15 12:11 <a href="http://www.cppblog.com/leetaolion/archive/2008/07/15/56172.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>