C++技术大会

主题:C++甜点
关键字:C++的黑科技,神奇和魔力
内容:三场主题演讲和一场开放性话题讨论
时间:五月十六号下午2:00-6:00
地点:珠海金山软件
参与方式:邀请和报名。报名唯一方式:show me your code,代码评审通过即可参加,联系邮箱purecpp@163.com。

C++技术大会值得期待,正所谓:

品c++甜点,喝下午茶,论编程之道。
探bit奥秘,舞动指尖,写程序诗篇。

横批:show me the code

重复代码检查工具simian的基本用法

simian是一个检查重复代码的工具,支持通过命令行和UI方式来检查代码,可以检查多种语言(比如C\C++, java, c#等)的代码,常见的编程语言都支持,下面先来看看如何使用命令行来检查c++重复代码的。

E:\temp\simian-2.3.33\bin>simian-2.3.33.exe -includes=”D:\code\test\**\*.hpp” -threshold=3 -formatter=xml:e:\temp\simian1.xml “*.rb”

上面这个命令行的含义是,查找目录D:\code\test\及其子目录下的所有的.hpp文件,找出三行及以上重复的代码,并将检查的结果输出到xml文件中。
这里重复的行数是可以自定义的,可以设置为3或者其它的数字;输出的文件也可以指定多种文件格式,比如xml txt等格式。如果不希望输出则去掉formatter就行了,结果会显示在控制台。

它还可以和vs工具集成,具体配置如下:

simian

目前simian只对非商业和个人是免费的,对于商业项目来说是要收费的,这一点使用者需要注意。

判断是否为tuple类型

 

在做kapok库的时候遇到一个问题,需要在编译期判断当前类型是否为tuple,刚开始我想的办法是判断类型是否有tuple_size方法,后面发现std::pair和std::array也适合tuple_size方法,这样就无法区分tuple和array了。

后来发现需要用上面的这种方法才能准确的判断是否为tuple。

上面的这个trait可不仅仅用来判断tuple的哦,对模板类型都适合,比如我还可以判断是否为queue, stack等等,像下面这样:

 

更好的C++序列化/反序列化库–Kapok

Kapok FAQ
1.Kapok的特点
简单,易用,header-only,只需要引用Kapok.hpp即可;高效,初步测试性和messagepack相当。
它是纯c++11实现,因此需要支持C++11的编译器。

2.主要功能
对对象进行自动化的序列化和反序列化,用起来非常简单,先来看个序列化/反序列化一个tuple的例子吧。
//序列化

//反序列化

看起来是不是很简单!
再看一个序列化一个自定义对象的例子。

一样的很简单,结构这里需要一个宏定义META,这个META的作用就是获取对象的元信息,有了这个元信息我们就可以很方便的实现序列化和反序列化了。

3.应用场景
Kapok除了不支持指针之外所有的对象都支持,支持结构体的无限嵌套(被嵌套的结构体也必须定义META宏)。这里说一下为什么不支持指针呢,因为对象中有指针的话存在两个问题:1.这个指针如果是动态数组的话,c++中无法获取这个数组的长度;2.指针还涉及到内存管理,我希望Kapok专注于序列化和/反序列化,暂时不考虑内存管理。

4.结构体必须有一个宏定义是否具有侵入性?
看起来每个序列化/反序列化的对象都要带一个宏定义似乎侵入性较强,但这种侵入性是完全无害的,因为它只是定义了一个额外的函数而已,这个函数只会在序列化/反序列化的时候才会用到,不会对当前对象造成任何影响,还有一点是因为c++没有反射,必须要通过某种方法来获取对象的元信息,纵观目前所有的序列化方案,只有这种方式是最简洁的,用户做最少的事情即可,这也是我选择这种方式的原因。

5.Kapok是如何实现序列化/反序列化的
Kapok的最底层是用到了rapidjson, 用它来实现对基本类型的序列化,对它做了一个简单的封装以便供上层使用,上面层就是序列化\反序列化实现层,主要是实现对对象元信息的解析和自动化的打包和解包。下面是Kapok序列化的一个示意图:
序列化对象

6.Kapok的性能如何
初步测试对一个tuple进行序列化/反序列化一万次,发现Kapok的耗时和messagepack相当。

7.Kapok是否支持多语言
暂时不支持,先把c++版本做好再说,如果要支持多语言的话,需要用其它语言进行重写,比较麻烦,所以暂时不考虑支持多语言。

c++社区诞生了

这里是纯粹的c++技术学习和交流的社区,汇聚了大批的c++的爱好者,这里有原创技术文章、热烈的技术讨论、开源项目、论坛互动和一些线下技术沙龙。你还在等什么,快加入我们吧!

我们的技术群:296561497

我们的开源项目:

https://coding.net/u/purecpp

Copy Protected by Chetan's WP-Copyprotect.