stout代码分析

  最近在使用mesos做高可用设计,在编译的过程中注意到mesos依赖stout,一个仅仅含有头文件的c++基础库。stout代码简洁,设计优雅,值得一读。

  stout从内容上可细分为以下几块:

  1. Primitives: Duration, Error, None, Nothing, Option, Owned, Result, Try, StopWatch,UUID。
  2. Collections: cache, hashmap, hashset, multihashmap,对常用数据结构进行了一些封装,增加可用性。
  3. Namespaces: fs, gzip, JSON, lambda,net, os, path, protobuf, strings, 对操作系统的api进一步封装。
  4. Miscellaneous: copy, EXIT, fatal, gtest, numify, preprocessor, stringify

  接下来将stout中的类库进行逐个分析。欲知详情,请等待下期分解。

  

时间: 2024-10-05 04:19:34

stout代码分析的相关文章

stout代码分析之五:UUID类

UUID全称通用唯一识别码,被广泛应用于分布式系统中,让所有的元素具有唯一的标识. stout中UUID类继承自boost::uuids::uuid.api如下: random, 产生一个UUID对象. fromBytes,从字节数组生成UUID对象 fromString, 从字符串生成UUID对象 toBytes, 从UUID对象生成字节数组 toString, 从UUID对象生成字符 废话不多说,上示例代码: #include "stout/uuid.hpp" #include &

stout代码分析之六:Stopwatch

在进行性能测试时,经常需要计算某个函数执行的时长.stout中的Stopwatch类可实现纳秒精度的计时. Stopwatch内部使用timespec记录开始和技术时间.   timeval和timespec稍有不同,有两点: timeval精确到微秒,而timespec精确到纳秒 获取当前时间,timeval对应函数gettimeofday(&tv,NULL), timespec对应函数clock_gettime(CLOCK_REALTIME, &ts); api如下: start, 开

stout代码分析之十:c++11之move和forward

stout中大量使用了c++11的特性,而c++11中move和forward大概是最神奇的特性了. 左值和右值的区别 int a = 0; // a是左值,0是右值 int b = rand(); // b是左值,rand()是右值 直观理解:左值在等号左边,右值在等号右边 深入理解:左值有名称,可根据左值获取其内存地址,而右值没有名称,不能根据右值获取地址. 2. 引用叠加规则 左值引用A&和右值引用A&& 可相互叠加 A& + A& = A& A&am

stout代码分析之九:c++11容器新特性

stout大量使用了c++11的一些新特性,使用这些特性有利于简化我们的代码,增加代码可读性.以下将对一些容器的新特性做一个总结.主要两方面: 容器的初始化,c++11中再也不用手动insert或者push_back来初始化了 容器的遍历,c++11中再也不用使用冗长的迭代器遍历了 让我们一睹为快吧: #include <map> #include <string> #include <iostream> #include <vector> int main

stout代码分析之八:cache类

stout中实现了LRU cache.cache的成员如下: public: typedef std::list<Key> list; typedef std::tr1::unordered_map< Key, std::pair<Value, typename list::iterator> > map; 可以看到map的第二项除了value之外,又有一个指向key的迭代器,这种设计有利于提高cache LRU操作的效率:当查询某个key时,同时获取value和key

stout代码分析之二:None类

stout库中为了避免使用NULL带来的风险,统一用None表示空. None类的实现方式如下: struct None {}; 奇怪的是, Nothing类实现方式与None一模一样..让人怀疑作者是不是写重了. struct Nothing {};

java代码分析及分析工具

java代码分析及分析工具 一个项目从搭建开始,开发的初期往往思路比较清晰,代码也比较清晰.随着时间的推移,业务越来越复杂.代码也就面临着耦合,冗余,甚至杂乱,到最后谁都不敢碰. 作为一个互联网电子商务网站的业务支撑系统,业务复杂不言而喻.从09年开始一直沿用到现在,中间代码经过了多少人的手,留下了多少的坑,已经记不清楚了,谁也说不清了. 代码的维护成本越来越高.代码已经急需做调整和改善.最近项目组专门设立了一个小组,利用业余时间做代码分析的工作,目标对核心代码进行分析并进行设计重构. 代码分析

Java静态代码分析工具Infer

Java静态代码分析工具Infer 作者:chszs,转载需注明.博客主页:http://blog.csdn.net/chszs 一.Infer介绍 Infer是Facebook最新开源的静态程序分析工具,用于在发布移动应用之前对代码进行分析,找出潜在的问题.目前Facebook使用此工具分析Facebook的App,包括Android.iOS.Facebook Messenger和Instagram等. Facebook称该工具帮助其每个月检查出应用潜在的数百个Bug,例如一些空指针访问.资源

$*和[email&#160;protected]之间区别代码分析

#!/bin/bash set 'apple pie' pears peaches for i in $*           /*单引号被去掉,循环单个字符输出*/ do echo $i done [[email protected] Ex_14.02-14.31]# sh 14-14-1 apple pie pears peaches -------------------------------------------------------------- #!/bin/bash set