stout代码分析之二:None类

  stout库中为了避免使用NULL带来的风险,统一用None表示空。

  None类的实现方式如下:

struct None {};

  奇怪的是, Nothing类实现方式与None一模一样。。让人怀疑作者是不是写重了。

struct Nothing {};

  

时间: 2024-10-10 23:58:58

stout代码分析之二:None类的相关文章

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代码分析之八: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

贪吃蛇的java代码分析(二)

代码剖析 贪吃蛇是一款十分经典的小游戏,对初入coding的朋友来说,拿贪吃蛇这样一个案例来练手十分合适,并不高的难度和成功后的成就感都是学习所必须的.下面我将依照我当时的思路,来逐步分析实现的整个过程. 让我们逐一分析.首先,整个游戏最基本的元素是地图.在java中用于绘图的类是swing和awt,在这里主要用到swing类.swing中用于窗口显示的类有JFrame及其子类.JFrame可以直接添加组件,但其本质是将组件添加到JFrame中的一个默认面板里,为了代码清晰,我会使用JPanel

stout代码分析

最近在使用mesos做高可用设计,在编译的过程中注意到mesos依赖stout,一个仅仅含有头文件的c++基础库.stout代码简洁,设计优雅,值得一读. stout从内容上可细分为以下几块: Primitives: Duration, Error, None, Nothing, Option, Owned, Result, Try, StopWatch,UUID. Collections: cache, hashmap, hashset, multihashmap,对常用数据结构进行了一些封装

Spring Developer Tools 源码分析:二、类路径监控

在 Spring Developer Tools 源码分析一中介绍了 devtools 提供的文件监控实现,在第二部分中,我们将会使用第一部分提供的目录监控功能,实现对开发环境中 classpath 的监控. 二.类路径监控 首先看一些这一部分可能涉及到的类图: 在图中,红色斜线左上部分是第一部分中介绍的文件目录监控的类,其中 FileSystemWatcher 会通过独立线程监控指定的目录,当目录内容发生变化时,通过对比快照可以获得所有监控目录变化的文件ChangedFiles,然后将变化通知

WebShell代码分析溯源(二)

一.一句话变形马样本 <?php $POST['POST']='assert';$array[]=$POST;$array[0]['POST']($_POST['assert']);?> 二.代码分析 1.调整代码格式 2.分析代码,首先先把”assert”字符串复制给POST数组,然后又把POST数组array数组,调试代码,搭建php环境(这里使用phpstudy) 3.发现结果输出为assert 4.这样最终一句话变形马就变成这样: <?php assert($_POST['ass

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