qicosmos | 知行一

所有由qicosmos发布的文章

寻找一名懂css尤其是bootsrap的志愿者

现在purecpp社区正在从php移植到c++ web开发框架feather,目前数据迁移工作已经完成,现在主要问题是css布局和格式的问题,由于我对css不熟,解决这些问题很慢,需要志愿者帮助解决一些css显示问题,加快社区的移植工作。

有意向着请联系 purecpp@163.com
或者在下面留言留下你的联系方式。

cppcon2018日程确定

随着cppcon2018的时间越来越近,今年的cppcon日程终于确定了,一百多位来自世界各地的讲师将给大家带来精彩的演讲,c++爱好者不可错过。大会详细日程在这里,大家可以根据自己的兴趣选择自己感兴趣的话题。

purecpp社区会继续关注并带来关于今年cppcon的最新资讯。

如果你没有机会去美国参加cppcon,你可以报名参加年底中国的cppcon,我们期待着您分享创新的idea。

cinatra发布新版本

cinatra本次更新主要侧重于简化接口使用,增加一些功能,修复一下bug。这仍然是一个预发布版本,但强烈推荐大家试用。

这次的版本具体有这些更新:

1.简化文件上传接口的使用,使用示例:

非常简洁,用户直接获取上传的文件即可,框架负责处理文件上传的细节。

2.简化文件下载功能

框架内置chunked文件下载功能,只要输入文件路径就可以实现下载:

http://127.0.0.1:8080/assets/show.jpg

更棒的是文件下载支持断点续传,这对大文件下载很方便。

3.简化websocket接口的使用

用户只需要在各自的事件响应函数里写逻辑即可,非常方便。

4.提供了一些更便利的render html接口

5.修复了一些bug

  1. 修复了和nginx结合的时候cookie的一个bug
  2. 修复了multipart同时有文件和键值对时忽略了键值对的bug;
  3. 修复了multipart传多个文件时丢失header的bug;
  4. 修复了url请求不支持中文的bug;

欢迎大家试用并提出宝贵的建议和意见,让cinatra越来越完善.

Hope you can enjoy cinatra!

解耦利器function message bus

需求1

能把模版函数和一个key注册起来以便后面使用,能把参数不同的函数和一个key注册起来以便后面使用。
c++中没有这样的一个容器可以存放模版函数和参数类型不同的函数。

需求2

对象A和对象B相互调用,耦合性很强,如何消除这种耦合性;
对象A和对象B没有任何关系,但A希望用B里面的方法,但二者又不适合直接关联起来。

如果你碰到这两个需求中的任何一个,那么你就需要function message bus。

作用

1.作为一个万能的函数注册器,可以注册任意类型的函数(除了重载函数);

2.解耦对象之间的调用关系

例子

上面的例子展示了如何注册不同类型的函数,包括普通(模版)函数,lambda和成员函数,也支持函数返回值。

因为函数的调用者不必知道被调用者,二者都依赖于function_msg_bus,所以你就可以通过它来解耦对象之间的调用关系。

具体代码

github

purecpp社区将举办今年的C++大会(讲师报名已经开始)

大会目标

Modern C++开源社区purecpp将举办今年的C++大会,目前正在筹备当中。举办C++大会的目的是为了促进行业交流,推广和促进modern c++为企业提高生产力和竞争力。

purecpp社区创始人祁宇作为大会的技术出品人(他也将在今年的cppcon上做演讲),负责招募国内外的优秀讲师。这将是purecpp社区组织举办的一场高水平、国际化的C++大会,大会的形式和内容将会与cppcon类似但又具备中国特色,如果你不能亲自前往美国参加cppcon那么就不要错过这次在中国举行的C++大会。

时间和地点

2018-11月或2018-12月,晚点确定最终时间

深证,广州,珠海三地之一,晚点确定最终地点

赞助商

这是开源社区组织的C++大会,不以盈利为目的,因此需要寻求赞助商。有意成为赞助商的请邮件purecpp@163.com

白金赞助商 16w(仅限一名)
1. 赞助商logo和链接放到官网
2. 开幕和闭幕上致谢
3. 提供两个展位
4. 可以在主会场打两个广告条幅
5. 大会宣传册上放赞助商logo

黄金赞助商 8w
1. 赞助商logo和链接放到官网
2. 开幕和闭幕上致谢
3. 提供一个展位
4. 大会宣传册上放赞助商logo

白银赞助商 4w
1. 赞助商logo和链接放到官网
2. 开幕和闭幕上致谢
3. 大会宣传册上放赞助商logo

青铜赞助商 2w
1. 赞助商logo和链接放到官网
2. 开幕和闭幕上致谢

大会主题

  1. C++11/14/17/20
  2. C++ libraries and frameworks of general interest
  3. ISO standardization proposals
  4. Parallelism/multi-processing
  5. Concepts and generic programming
  6. Functional programming
  7. High performance computing
  8. Software development tools, techniques, and processes for C++
  9. Practical experiences using C++ in real-world applications
  10. Industry-specific perspectives: mobile and embedded systems, game development, high performance trading, scientific programming, robotics, etc.

讲师报名

不管你是什么学历、什么公司、什么国家,只要你有和C++有关的创新的idea,你就可以报名!
讲师报名需要填一个报名表,类似于cppcon,你需要提供演讲者的信息、演讲的摘要信息和主要内容。如果你有很有说服力的证明材料就更好了,证明材料是能证明你演讲内容的代码或之前的ppt。

讲师报名阶段两个月左右,报名阶段结束之后就是评审阶段。采取的是专家评审方式,由两名中国专家和两名外国专家对演讲内容进行评审,评审通过的讲师就可以参会了。无论评审通过与否我们都会告知报名者结果。

这次大会对讲师的质量会要求很高,竞争也会比较激烈,因此填一份好的讲师报名表很重要。

希望中国的C++高手和天才们赶紧报名成为讲师,中国的C++大会将因你而不同!

中国C++大会讲师报名表

cppcon2018将于九月在贝尔维尤举办

cppcon2018

由C++标准委员会组织的顶级C++技术大会cppcon2018将于9月在bellevue举办,C++之父Bjarne Stroustrup和C++标准委员会主席Herb Sutter将在大会上做主旨演讲。来自全球数十个国家的C++专家将在大会上做精彩的演讲,国际各大知名公司也将参会。

今年的cppcon竞争非常激烈,报名的演讲主题有两百多个,最终只有一百多个主题被接受。相信今年的cppcon将是一场C++技术盛宴。随着C++17的确定和C++20的到来,今年势必会涌现出更多的新思想和新技术,非常令人期待。

purecpp社区创始人祁宇也将在这次大会上做演讲,这是他连续两年参加cppcon,在此也希望有更多的来自中国的C++爱好者能在C++国际舞台上发出自己的声音。

purecpp社区将持续关注cppcon2018技术大会的最新资讯并及时与大家分享。

欢迎关注purecpp社区的微信公众号。
qrcode_for_gh_300922997283_430

再谈自动注册的工厂

关于自动注册的工厂,我之前写过了两篇文章,之前的一篇文章在这里。这个自动注册的工厂通过宏实现自动注册,同时也可以支持变参。

下面是通过宏实现自动注册的例子。

之前提到的自动注册的工厂

问题

通过宏实现的自动注册工厂的主要问题就是需要借助宏,宏有两个问题,第一个问题是不能调试,第二个问题是让代码变得晦涩。这些自动注册的宏散落在各处,也增加了维护负担。如果能不借助宏实现自动注册就可以消除这些问题了。

改进目标

之前的自动注册工厂还需要改进,改进的目标就是消除宏。

实现

实现代码很简单,主要思路是借助crtp和静态变量初始化顺序来实现的,因为静态变量的实例化是早于main函数的,因此我们可以利用静态变量实例化的时候实现自动注册。

创建的对象需要派生于AutoMsgFactory,并实现一个静态的id函数,这个id就是创建该类型对象需要的一个唯一的id。需要注意的一个细节是:在id函数中需要使用一下基类AutoMsgFactory中的静态变量registered_,用来保证静态变量实例化。

assert(registered_);

上面这行代码在这里有两个作用,第一个作用是调用了registered_保证当前类会被自动注册,第二个作用是避免重复注册,出现重复注册时会触发断言错误。

另外通过编译期限定派生类必须定义一个Id函数可以保证派生类不会忘记定义创建该类需要的唯一id,这个id是自定义的,可以是枚举类型也可以是整形。

总结

这个实现消除了宏,在使用上也比较方便,不过也有个缺点是需要调用一下静态变量。综合来看,个人感觉比通过宏实现自动注册更好。

更新 支持变参

编译期遍历std::array

需求

在编译期遍历一个std::array,并且保证遍历的索引为编译期常量。

实现代码: