上一页 1 ··· 5 6 7 8 9 10 下一页

2013年8月13日

(原创)c++中的类型擦除

摘要: c++11 boost技术交流群:296561497,欢迎大家来交流技术。关于类型擦除,可能很多人都不清楚,不知道类型擦除是干啥的,为什么需要类型擦除。有必要做个说明,类型擦除就是将原有类型消除或者隐藏。为什么要擦除类型?因为很多时候我不关心具体类型是什么或者根本就不需要这个类型,通过类型擦除我们可以获取很多好处,比如使得我们的程序有更好的扩展性、还能消除耦合以及消除一些重复行为,使程序更加简洁高效。归纳一下c++中类型擦除方式主要有如下五种:第一种:通过多态来擦除类型第二种:通过模板来擦除类型第三种:通过某种容器来擦除类型第四种:通过某种通用类型来擦除类型第五种:通过闭包来擦除类型第一种类型 阅读全文

posted @ 2013-08-13 21:07 qicosmos(江南) 阅读(11088) 评论(6) 推荐(5) 编辑

2013年8月9日

c++中数据表如何转成业务实体--map和结构体的相互转换

摘要: 应用场景:如何把数据库表中的一行转换成一个业务实体结构体,c#和java中都有实体框架,表到实体的转换很方便,c++中缺少这些框架,但是有一些折中的办法去做。其实问题的本质是:map如何转成结构体。问题:map的字段和结构体字段一一对应时,如何把map中字段对应的值付给结构体中相同名称字段?有点麻烦的地方:如何让结构体去在map中查找相应的字段值,一种办法是通过手写的办法,把每个字段名称写成常量字符串,然后去map中查找,找到后,再给该字段赋值,这个办法是可以的,但是重复性的硬编码了很多字段名称,代码也比较丑陋。一个比较好的办法是通过一个宏和一个模板函数去赋值比较好。这是我们的结构体#defi 阅读全文

posted @ 2013-08-09 09:57 qicosmos(江南) 阅读(1873) 评论(0) 推荐(1) 编辑

2013年7月30日

线程池的陷阱

摘要: 使用线程池要小心,一不小心就会导致程序挂死。举例说明这种情况。线程池中有一个同步队列存放数据,多个线程取队列中的数据去处理,数据的类型可能有多个,所以每种数据类型对应一个处理函数,假设某种数据的处理函数会把线程阻死,这时就悲剧了,这个阻死会蔓延到线程池的所有线程,最后线程池中所有的线程都挂死了,程序也挂死了。因为线程池的线程是不停的切换去处理数据的,凡是遇到会挂死线程的数据时,线程会一个个死掉,直到所有的线程挂死。解决办法是:一、一个类型的数据一个线程或者多个类型的数据一个线程,这样某个类型的数据处理导致线程挂死,其它线程还能正常运行,不会导致程序挂死。二、线程池中加超时处理,超时处理就不会挂 阅读全文

posted @ 2013-07-30 14:40 qicosmos(江南) 阅读(1467) 评论(0) 推荐(1) 编辑

2013年6月25日

(原创)c++11改进我们的模式之改进代理模式,实现通用的AOP框架

摘要: c++11 boost技术交流群:296561497,欢迎大家来交流技术。本次要讲的时候如何改进代理模式,具体来说是动态代理模式,动态代理模式一般实现AOP框架,不懂AOP的童鞋看这里。我前面的博文也实现了一个AOP框架(可以参考我前面的博文:(原创) C++ 轻量级AOP框架),但是那个AOP框架... 阅读全文

posted @ 2013-06-25 10:09 qicosmos(江南) 阅读(3513) 评论(8) 推荐(2) 编辑

2013年6月20日

(原创)c++11改进我们的模式之改进表驱动模式

摘要: 所谓表驱动法(Table-Driven Approach),简单讲是指用查表的方法获取值。表驱动是将一些通过较为复杂逻辑语句来得到数据信息的方式,通过查询表的方式来实现,将数据信息存放在表里。对于消除长的switch-case和if-else-if语句来说很有效,比如下面的代码:string Get... 阅读全文

posted @ 2013-06-20 17:39 qicosmos(江南) 阅读(5082) 评论(0) 推荐(2) 编辑

(原创)c++11改进我们的模式之改进观察者模式

摘要: 和单例模式面临的是同样的问题,主题更新的接口难以统一,很难做出一个通用的观察者模式,还是用到可变模板参数解决这个问题,其次还用到了右值引用,避免多余的内存移动。c++11版本的观察者模式支持注册的观察者为函数、函数对象和lamda表达式,也避免了虚函数调用,更简洁更通用。直接看代码。template... 阅读全文

posted @ 2013-06-20 10:51 qicosmos(江南) 阅读(4034) 评论(2) 推荐(0) 编辑

2013年6月19日

(原创)c++11改进我们的模式之改进访问者模式

摘要: 本次讲c++11改进我们的模式之改进访问者模式访问者模式是GOF23个设计模式中比较复杂的模式之一,但是它的功能也很强大,非常适合稳定的继承层次中对象的访问,可以在不修改被访问对象的情况下,动态添加职责,这正是访问者模式强大的地方,但是它的实现又造成了两个继承层次的强烈耦合,这也是被人诟病的地方,可以说是让人爱又让人恨的模式。c++11实现的访问者模式将会解决这个问题。我们将在c++11版本的访问者模式中看到,定义新的访问者是很容易的,扩展性很好,被访问者的继承层次也不用做任何修改。具体代码:templatestruct Visitor;templatestruct Visitor : Vis 阅读全文

posted @ 2013-06-19 22:12 qicosmos(江南) 阅读(2397) 评论(1) 推荐(0) 编辑

(原创)c++11改进我们的模式之改进单例模式

摘要: 我会写关于c++11的一个系列的文章,会讲到如何使用c++11改进我们的程序,本次讲如何改进我们的模式,会讲到如何改进单例模式、观察者模式、访问者模式、工厂模式、命令模式等模式。通过c++11的改进,我们的模式变得更通用、更简洁、更强大。本次讲如何改进单例模式。在c++11之前,我们写单例模式的时候... 阅读全文

posted @ 2013-06-19 21:29 qicosmos(江南) 阅读(17612) 评论(3) 推荐(7) 编辑

2013年5月30日

(原创)C++半同步半异步线程池

摘要: c++11 boost技术交流群:296561497,欢迎大家来交流技术。线程池可以高效的处理任务,线程池中开启多个线程,等待同步队列中的任务到来,任务到来多个线程会抢着执行任务,当到来的任务太多,达到上限时需要等待片刻,任务上限保证内存不会溢出。线程池的效率和cpu核数相关,多核的话效率更高,线程... 阅读全文

posted @ 2013-05-30 13:35 qicosmos(江南) 阅读(4534) 评论(0) 推荐(0) 编辑

(原创)C++ 同步队列

摘要: 同步队列作为一个线程安全的数据共享区,经常用于线程之间数据读取,比如半同步半异步线程池的同步队列。其实做起来比较简单,要用到list、锁和条件变量,条件变量的作用是在队列满了或者空了的时候等待通知。先看一个简单的同步队列:#include #include #include #include #in... 阅读全文

posted @ 2013-05-30 13:24 qicosmos(江南) 阅读(3788) 评论(2) 推荐(1) 编辑

上一页 1 ··· 5 6 7 8 9 10 下一页

导航