2014年5月26日

(原创)舌尖上的c++--相逢

摘要: 引子 前些时候,我在群里出了一道题目:将变参的类型连接在一起作为字符串并返回出来,要求只用函数实现,不能借助于结构体实现。用结构体来实现比较简单:template struct Connect;templatestruct Connect{ static string GetName() ... 阅读全文

posted @ 2014-05-26 14:32 qicosmos(江南) 阅读(2873) 评论(7) 推荐(4) 编辑

2014年5月12日

std::bind技术内幕

摘要: 引子 最近群里比较热闹,大家都在山寨c++11的std::bind,三位童孩分别实现了自己的bind,代码分别在这里:木头云的实现mr.li的实现null的实现,null的另一个版本的实现 这些实现思路和ms stl的std::bind的实现思路是差不多的,只是在实现的细节上有些不同。个人觉得木... 阅读全文

posted @ 2014-05-12 14:45 qicosmos(江南) 阅读(13835) 评论(1) 推荐(11) 编辑

2014年5月3日

(原创)谈谈架构师的职责(二)

摘要: 在谈架构师分内的事情之前想先谈谈为什么要做架构,这个问题其实挺有意思的,一种是被动的一种是主动的。被动的做架构设计是因为设计者内心并不太愿意去做设计,不愿意做设计的原因挺多的,比如,项目开发周期短,觉得没有足够时间去做设计。或者,认为设计很麻烦,除了UML设计、设计文档之类的还有设计评审什么的。... 阅读全文

posted @ 2014-05-03 22:23 qicosmos(江南) 阅读(3707) 评论(13) 推荐(10) 编辑

2014年4月30日

(原创)谈谈架构师的职责(一)

摘要: 很早就想写一篇文章来谈谈架构师的职责了,因为自己做架构设计也有几年了,有得有失,想以此文来谈谈自己对架构师职责的认识。架构师这个话题很大,在这里不打算深入详谈,只是简要的谈谈,想到哪里说到哪里。在谈架构师之前我想谈谈什么是架构,关于架构有很多种专业的定义,我这里就用最好理解的一种定义来介绍架构是... 阅读全文

posted @ 2014-04-30 23:11 qicosmos(江南) 阅读(7382) 评论(19) 推荐(13) 编辑

2014年4月18日

(原创)一个超级对象池的实现

摘要: 对象池对于创建开销比较大的对象来说很有意义,为了避免重复创建开销比较大的对象,我们可以通过对象池来优化。对象池的思路比较简单,事先创建好一批对象,放到一个集合中,以后每当程序需要新的对象时候,都从对象池里获取,每当程序用完该对象后,都把该对象归还给对象池。这样会避免重复的对象创建,提高程序性能。... 阅读全文

posted @ 2014-04-18 17:24 qicosmos(江南) 阅读(9578) 评论(7) 推荐(3) 编辑

2014年4月11日

(原创)composite模式和bridge模式是天生的好朋友

摘要: composite模式的意图是:将对象组合成树形结构以表示“部分-整体”的层次结构。composite使得用户对单个对象和组合对象的使用具有一致性。它的类图如下: composite模式的实现分为透明的composite模式和安全的composite模式,二者的差别是添加、删除和获取子节点的行为放到基类还是放到复合节点类中。透明的则放到基类中,但是这些行为对于不可再分的叶子节点来说是无意义的,对于存在子节点的复合节点才有意义。但是透明的组合模式具有更好的一致性和可读性,一般都建议用透明的组合模式,在基类中提供这些行为的空的虚方法,只在复合节点中重写这些虚方法。 透明的组合模式的简单实现... 阅读全文

posted @ 2014-04-11 15:04 qicosmos(江南) 阅读(2507) 评论(5) 推荐(3) 编辑

2014年4月3日

(原创)c++11中的日期和时间库

摘要: c++11提供了日期时间相关的库chrono,通过chrono相关的库我们可以很方便的处理日期和时间。c++11还提供了字符串的宽窄转换功能,也提供了字符串和数字的相互转换的库。有了这些库提供的便利的工具类,我们能方便的处理日期和时间相关的转换和格式输出。chrono chrono库主要包含了... 阅读全文

posted @ 2014-04-03 12:14 qicosmos(江南) 阅读(35959) 评论(8) 推荐(12) 编辑

2014年3月15日

(原创)结构体自动化转为char数组的实现

摘要: 结构体自动化转换为char数组这个需求,来自于一个最近开发的一个项目,在项目开发过程中遇到一个小问题,需要将各种结构体拷贝到char数组中,这对于一个简单的结构体来说是很简单的事情,比如下面这个只有整形字段的结构体:struct A{ int a; int b;};char buf[100];A a = {1,2};memcpy(buf, &a, sizeof(A)); 一句memcpy就能将结构体a拷贝到char数组中去了,直接通过memcpy拷贝结构体只对于内存连续的结构体有效。如果结构体内存不连续,结构体中含有double、string、指针甚至嵌套结构体时,直接拷贝是... 阅读全文

posted @ 2014-03-15 10:44 qicosmos(江南) 阅读(23925) 评论(11) 推荐(7) 编辑

2014年3月7日

(原创)一个轻量级、高性能的消息分发器的实现

摘要: 一个消息分发器应该要具备以下几个特征:集中注册消息以及消息处理函数;可以处理任何类型的消息;根据消息选择正确的消息处理函数;能检测消息的正确性; 要实现一个消息分发器的难点在如何能处理所有的消息,因为不同的消息的消息处理函数是不同的,有可能不同的消息处理函数的返回值、形参都不同,目前还没有一种容器能将所有的函数,诸如 void f(); void f1(int); int f2(double); double f3(int, double)等函数放到一个容器中。如果真的存在这种容器的话,那就可以将消息和消息函数作为一个pair存放到这个容器中,分发消息的时候就可以根据消息选择对应的消息处理函. 阅读全文

posted @ 2014-03-07 12:04 qicosmos(江南) 阅读(7147) 评论(12) 推荐(6) 编辑

2014年3月2日

c++11实现c++14的optional

摘要: c++14中将包含一个std::optional类,它的功能和用法和boost的optional类似。optional内部存储空间可能存储了T类型的值也可能没有存储T类型的值,只有当optional被T初始化之后,这个optional才是有效的,否则是无效的,它实现了未初始化的概念。optional的应用场景函数返回无效对象 有时根据某个条件去查找对象时,如果查找不到对象时就会返回一个无效值,这不表明函数执行失败,而是表明函数正确执行了,但是结果却不是有用的值,这时就可以返回一个未初始化的optional对象出去,在外面判断这个optional对象是否有效对象是否被初始化,如果没有被初始... 阅读全文

posted @ 2014-03-02 22:37 qicosmos(江南) 阅读(12820) 评论(2) 推荐(3) 编辑

导航