cpp

RxCpp

July 10, 2022
cpp

Reactive Programming似乎是已经过时了。

初次接触的时候是在快毕业的时候,大概2017年。那时RxJava/RxAndroid配合网络库来做一些很fancy的重试、消除重复点击之类的任务,可以把代码写的异常的优雅。当时实际的编码量和项目经验不足,理解起来稍微困难了点。现在工作中也有了可以抽象成stream的场景,看看能不能把这个库看明白点用在工作中。

这里不会太关注rx的一些使用场景,更多关注一些稍微细节一些的实现,以帮助和梳理使用时对各个组件生命周期的把控。

...

【翻译】Traits:一种新的而且有用的Template技巧

May 27, 2022
cpp

文章来自Traits: a new and useful template technique

应该是很老(1995)的文章了,不过很适合作为Template入门的材料。

ANSI/ISO C++标准库一开始就想支持国际化(internationalization),虽然一开始还没相好具体细节,但是最近5年逐渐有点眉目了。现在得到的结论是,应当用template来对需要进行字符操作的工具进行参数化。

给现有的iostream和string类型进行参数化其实挺难的,需要发明一种新的技术才行。幸运的是,这种技术可以很好的服用在其他地方。

...

TypeId in NS3

July 29, 2018
cpp, ns3

NS3作为一个网络仿真库,出于性能的考量选择了C++。在写仿真程序时,不可避免的要对各种实体进行建模,自然C++中的class成了唯一可选的方案。不加任何技巧的class的确可以满足对某些实体的建模,可是在仿真软件的编写中需要有足够的动态性,比如有这样一些需求:

  1. 动态的获知某个实体所具有的各类属性与属性的值
  2. 这个实体的状态变化后引发一系列的动作

这些都不是过分的需求,如果真的写过仿真程序的话肯定会非常渴求使用的软件能够提供实现这些需求的方法。要自己干巴巴的实现这些需求也不是不可以,比如可以提供一些查询接口来实现1;对于2的话,Qt的signal/slot或许可以实现。说到Qt了,其实QObject拥有了超越普通C++ class的能力,也都能满足上面指出的这些需求,但是其解决方案似乎有点重。

幸好,NS3通过TypeId可以很好的解决上面提出的各类需求。

...