<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[lujun-cc的专栏]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/henan_lujun</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; henan_lujun]]></copyright><item><title><![CDATA[C++单元测试三：测试private成员]]></title><link>https://blog.youkuaiyun.com/henan_lujun/article/details/9013363</link><guid>https://blog.youkuaiyun.com/henan_lujun/article/details/9013363</guid><author>henan_lujun</author><pubDate>Mon, 03 Jun 2013 14:48:08 +0800</pubDate><description><![CDATA[测与不测之争
关于类的私有成员（数据和方法），要不要进行单元测试之争，尚没有统一的结论；（关于这一争论，可以参考http://stackoverflow.com/questions/9202862/is-unit-testing-private-methods-a-good-practice）
有人认为测试私有成员也是一个好的实践，原因嘛，就是没有原因，你本来就应该测你的所有代码；也有人说，类]]></description><category></category></item><item><title><![CDATA[C++单元测试二：何时Mock及其是与非]]></title><link>https://blog.youkuaiyun.com/henan_lujun/article/details/9009395</link><guid>https://blog.youkuaiyun.com/henan_lujun/article/details/9009395</guid><author>henan_lujun</author><pubDate>Sun, 02 Jun 2013 23:01:44 +0800</pubDate><description><![CDATA[什么时候需要mock
在前面一部分（C++单元测试一：并非看上去那么简单——几个很实际的问题），我遇到的问题是：一个单元测试工程只能测一个被测类（其实前文的后记部分也已指出，其实创建新工程也不是特别必要，可以让Mock类从被测类继承，但问题是这是真的Mock吗？）；
那么，是不是一个测试工程只能测一个类呢？还是这种方式本身就有问题呢？由于没有找到实际工程中测试代码、被测代码的文件组织方面的资料]]></description><category></category></item><item><title><![CDATA[C++单元测试一：并非看上去那么简单——几个很实际的问题]]></title><link>https://blog.youkuaiyun.com/henan_lujun/article/details/9002420</link><guid>https://blog.youkuaiyun.com/henan_lujun/article/details/9002420</guid><author>henan_lujun</author><pubDate>Fri, 31 May 2013 20:47:48 +0800</pubDate><description><![CDATA[理想与现实
为Java和C#做单元测试，基本上都有比较统一的工具、模式可用，IDE的支持也非常到位；可是到了C++这里，一切就变的那样的“不走寻常路”，各种单元测试框架盛行，例如CppUnit, CppUnitLite, CxxUnit,Google Test等等，以及微软在VS2012中也加入了对原生C++代码单元测试的支持MSTest。面对如此诸多的测试框架，选择哪一个其实无所谓，只要顺手就]]></description><category></category></item><item><title><![CDATA[shared_ptr的一些尴尬]]></title><link>https://blog.youkuaiyun.com/henan_lujun/article/details/8984543</link><guid>https://blog.youkuaiyun.com/henan_lujun/article/details/8984543</guid><author>henan_lujun</author><pubDate>Tue, 28 May 2013 14:32:38 +0800</pubDate><description><![CDATA[shared_ptr在boost库中已经有多年了，C++11又为其正名，把他引入了STL库，放到了std的下面，可见其颇有用武之地；但是shared_ptr是万能的吗？有没有什么样的问题呢？本文并不说明shared_ptr的设计原理，也不是为了说明如何使用，只说一下在使用过程中的几点注意事项。


智能指针是万能良药？

智能指针为解决资源泄漏，编写异常安全代码提供了一种解决方案，那么他]]></description><category></category></item><item><title><![CDATA[博客搬家]]></title><link>https://blog.youkuaiyun.com/henan_lujun/article/details/8968237</link><guid>https://blog.youkuaiyun.com/henan_lujun/article/details/8968237</guid><author>henan_lujun</author><pubDate>Fri, 24 May 2013 09:17:55 +0800</pubDate><description><![CDATA[在优快云注册账号很多年了，从来没打算开通博客，之前也零零散散在其他地方写过一些技术文章，但最近这两年都没维护了——太懒了。这两天有时间又有写东西的冲动，就准备了boost源码的一些文章，等再发到那个博客上才发现，自己上一篇文章已经是两年前的事儿了，太汗了。于是想干脆搬家吧，然后就开了这儿的博。
所以，本贴以前的帖子，都是从那边搬过来的。有些可能太老，自己都记不清楚了。兴许后面自己会勤快点。]]></description><category></category></item><item><title><![CDATA[boost.asio 学习笔记07——总结]]></title><link>https://blog.youkuaiyun.com/henan_lujun/article/details/8965046</link><guid>https://blog.youkuaiyun.com/henan_lujun/article/details/8965046</guid><author>henan_lujun</author><pubDate>Thu, 23 May 2013 14:04:13 +0800</pubDate><description><![CDATA[至此，我们对boost.asio的基本体系结构以及在windows上的实现，做了一个梳理；个人认为常用到的操作及其实现都涉及到了。当然，本文并没有对非Win环境下的实现、SSL，串口、buffer管理、以及如何使用asio等进行讨论。
 
针对asio，个人也是刚刚接触正在学习，觉得要想使用好他，还是首先要了解socket的基本操作，在windows环境下，还要了解IOCP模型，然后才能用好它]]></description><category></category></item><item><title><![CDATA[boost.asio 学习笔记06——其他]]></title><link>https://blog.youkuaiyun.com/henan_lujun/article/details/8965045</link><guid>https://blog.youkuaiyun.com/henan_lujun/article/details/8965045</guid><author>henan_lujun</author><pubDate>Thu, 23 May 2013 14:04:10 +0800</pubDate><description><![CDATA[asnyc_read VS. async_read_some VS. async_receive
async_read是一个全局函数；后面两个则于ip::tcp::socket的成员个函数；都可以用来异步读取操作，他们有什么样的差别呢。先来看async_read_some和async_receive，他们的文档说明如下：

async_read_some:
Start an asynchr]]></description><category></category></item><item><title><![CDATA[boost.asio 学习笔记05——asio的windows实现]]></title><link>https://blog.youkuaiyun.com/henan_lujun/article/details/8965044</link><guid>https://blog.youkuaiyun.com/henan_lujun/article/details/8965044</guid><author>henan_lujun</author><pubDate>Thu, 23 May 2013 14:04:08 +0800</pubDate><description><![CDATA[Operation
还记得前面我们在分析resolver的实现的时候，挖了一个关于operation的坑？为了不让自己陷进去，现在来填吧；接下来我们就来看看asio中的各种operation。
 
和前面提到过的service的类似，这里的operation也分为两大系：IOCP
 Enable和Disable系列。这里我们重点关注下图中红色部分表示的IOCP
 Enable系列oper]]></description><category></category></item><item><title><![CDATA[boost.asio 学习笔记04——asio的体系结构]]></title><link>https://blog.youkuaiyun.com/henan_lujun/article/details/8965043</link><guid>https://blog.youkuaiyun.com/henan_lujun/article/details/8965043</guid><author>henan_lujun</author><pubDate>Thu, 23 May 2013 14:04:05 +0800</pubDate><description><![CDATA[三层类关系图
根据前面的分析，我们知道asio有着这样的逻辑：

参考STL，提供basic模版，对外使用basic模版的实例提供接口。basic模版将具体操作委托给下层服务类完成。下层服务类再把操作委托给平台相关的服务类。
 
鉴于此，我们将asio体系划分为三层：io
 object层，basic_模版类层，服务层。

第一层：io object层，作为应用程序直接使用的对象，]]></description><category></category></item><item><title><![CDATA[boost.asio学习笔记03——io objects]]></title><link>https://blog.youkuaiyun.com/henan_lujun/article/details/8965042</link><guid>https://blog.youkuaiyun.com/henan_lujun/article/details/8965042</guid><author>henan_lujun</author><pubDate>Thu, 23 May 2013 14:04:03 +0800</pubDate><description><![CDATA[asio的文档，告诉我们在声明一个io_service对象之后，就可以创建io对象去干活了，例如：




int main(int argc, char* argv[])
{
   boost::asio::io_service io_service;
 
   tcp::resolver resolver(io_service);
   tcp::resolver::que]]></description><category></category></item><item><title><![CDATA[boost.asio 学习笔记02——io_service类]]></title><link>https://blog.youkuaiyun.com/henan_lujun/article/details/8965041</link><guid>https://blog.youkuaiyun.com/henan_lujun/article/details/8965041</guid><author>henan_lujun</author><pubDate>Thu, 23 May 2013 14:04:00 +0800</pubDate><description><![CDATA[从第一个boost.asio的教程开始，boost文档就一直在告诉我们：使用boost.asio第一步就是要创建一个io_service对象。那么io_service是个什么东西呢？
 
boost.asio文档说，io_service为下面的这些异步IO对象提供最核心的IO功能：

boost::asio::ip::tcp::socketboost::asio::ip::tcp::acc]]></description><category></category></item><item><title><![CDATA[boost.asio 学习笔记01——概述]]></title><link>https://blog.youkuaiyun.com/henan_lujun/article/details/8965040</link><guid>https://blog.youkuaiyun.com/henan_lujun/article/details/8965040</guid><author>henan_lujun</author><pubDate>Thu, 23 May 2013 14:03:58 +0800</pubDate><description><![CDATA[boost.asio为异步IO提供了一份标准的C++的跨平台实现，特别针对网络IO提供了良好的支持，使之成为C++网络编程利器。关于如何使用asio，boost文档中已经有了详尽说明，而且附带的例子也很直观，我们不必再造轮子；本文则结合asio的基本应用，侧重于源代码的分析，特别是针对windows平台上的实现进行分析。 
纵观asio源码，在统一的接口层之下，asio提供了大量的类来支持不同的]]></description><category></category></item><item><title><![CDATA[QT:“无法定位程序输入点……”]]></title><link>https://blog.youkuaiyun.com/henan_lujun/article/details/8965039</link><guid>https://blog.youkuaiyun.com/henan_lujun/article/details/8965039</guid><author>henan_lujun</author><pubDate>Thu, 23 May 2013 14:03:55 +0800</pubDate><description><![CDATA[装了Qt之后，要把Qt的安装目录映射到Path环境变量里面，主要是这几个目录：
a. D:\ProgramFiles\Qt.2010.05\qt\bin;
b. D:\ProgramFiles\Qt.2010.05\bin;
c. D:\ProgramFiles\Qt.2010.05\mingw\bin;
需要注意的一点是：目录a和b的需要按照a,b的顺序写下来，否则在资源管理器运行qt程]]></description><category></category></item><item><title><![CDATA[C++:获取类成员的偏移量]]></title><link>https://blog.youkuaiyun.com/henan_lujun/article/details/8965038</link><guid>https://blog.youkuaiyun.com/henan_lujun/article/details/8965038</guid><author>henan_lujun</author><pubDate>Thu, 23 May 2013 14:03:53 +0800</pubDate><description><![CDATA[第一种方式是MFC里使用广泛的宏：对空对象成员取地址
#define OFFSET(structure, member) ((int)&((structure*)0)->member); 
正如我们平时通过某对象的地址指针访问某个成员变量一样，这里只是强制使用0作为该地址，但区别是并没有通过该地址去访问成员变量，而只是用&操作符来获取该成员变量的地址，所以不会出现访问违规的情况。
objec]]></description><category></category></item><item><title><![CDATA[[转载]深入了解字符集和编码]]></title><link>https://blog.youkuaiyun.com/henan_lujun/article/details/8965037</link><guid>https://blog.youkuaiyun.com/henan_lujun/article/details/8965037</guid><author>henan_lujun</author><pubDate>Thu, 23 May 2013 14:03:51 +0800</pubDate><description><![CDATA[转自：http://hideto.javaeye.com/blog/97803     关键字: 字符集 编码   一、什么是字符集?什么是编码?   字符(Character)是文字与符号的总称，包括文字、图形符号、数学符号等。   一组抽象字符的集合就是字符集(Charset)。   字符集常常和一种具体的语言文字对应起来，该文字中的所有字符或者大部分常用字符就构成了该文字的字符集，比如英文字]]></description><category></category></item><item><title><![CDATA[Eclipse+CDT+MinGW+QT开发环境搭建]]></title><link>https://blog.youkuaiyun.com/henan_lujun/article/details/8965036</link><guid>https://blog.youkuaiyun.com/henan_lujun/article/details/8965036</guid><author>henan_lujun</author><pubDate>Thu, 23 May 2013 14:03:48 +0800</pubDate><description><![CDATA[本人使用的是Eclipse+CDT+MinGW+QT作为开发环境，简单描述一下此环境的搭建。
第一步：下载Eclipse。从http://www.eclipse.org/downloads/随便下载一个Eclipse，注意如果直接下载的是for C++的就可以省略第二步了。下载完成后直接解压就可以使用了。
第二步：下载安装CDT。从http://www.eclipse.org/cdt/下载CD]]></description><category></category></item><item><title><![CDATA[Boost 库的编译]]></title><link>https://blog.youkuaiyun.com/henan_lujun/article/details/8965035</link><guid>https://blog.youkuaiyun.com/henan_lujun/article/details/8965035</guid><author>henan_lujun</author><pubDate>Thu, 23 May 2013 14:03:46 +0800</pubDate><description><![CDATA[-->-->-->-->-->-->



编译环境

    编译器：MinGW（4.4）

Path：MinGW下的bin目录加到系统PATH路径

 

编译工具：bjam.exe

Boost使用bjam来编译代码（bjam调用编译器），bjam.exe可以从boost网站下载，也可以自己从源代码编译出来。不过推荐从网站下载，因为方便。

为进行编译，Bja]]></description><category></category></item><item><title><![CDATA[UML中的“关系”总结]]></title><link>https://blog.youkuaiyun.com/henan_lujun/article/details/8965034</link><guid>https://blog.youkuaiyun.com/henan_lujun/article/details/8965034</guid><author>henan_lujun</author><pubDate>Thu, 23 May 2013 14:03:44 +0800</pubDate><description><![CDATA[UML中，事物之间的联系方式，无论是物理上的，还是逻辑上的，都用“关系（relationship）”来建模。在面向对象的建模中，将“关系”细分为三种：依赖、泛化、关联。下面分别说明。
 
1、 
依赖（dependency）
依赖是一种使用关系。它表示一个事物的变化会影响到所有使用它的事物的行为。在UML图形表示法中，依赖用一个带方向的虚线来表示，箭头指向被依赖的事物。]]></description><category></category></item><item><title><![CDATA[如何传递类成员函数的指针]]></title><link>https://blog.youkuaiyun.com/henan_lujun/article/details/8965033</link><guid>https://blog.youkuaiyun.com/henan_lujun/article/details/8965033</guid><author>henan_lujun</author><pubDate>Thu, 23 May 2013 14:03:42 +0800</pubDate><description><![CDATA[需求：
在类A里面，有一组规格相同的函数； 
类B中有一个成员F为A中成员函数的指针，在构造B对象时对该成员F进行初始化，然后在Do函数中调用此函数指针所对应的函数。
为实现这个目的，需要怎么做呢。





 





Class A



Void F1();



Void F2();



Void F3();



 
]]></description><category></category></item><item><title><![CDATA[初学S60，常见问题记录]]></title><link>https://blog.youkuaiyun.com/henan_lujun/article/details/8965032</link><guid>https://blog.youkuaiyun.com/henan_lujun/article/details/8965032</guid><author>henan_lujun</author><pubDate>Thu, 23 May 2013 14:03:39 +0800</pubDate><description><![CDATA[最近开始学习S60，从搭建环境到第一个Helloworld程序出世，期间遇到了不少问题，再同事的帮助以及Google的强力支持下，逐一得到解决，下面逐一做一个记录。
1
出现“Cannot start ECMT Manager”错误提示框
                           



原因：在安装Symbian S60 3rd Edition FP1 SDK时，默认识]]></description><category></category></item></channel></rss>