一、类功能:时间戳类,主要提供基础的时间值获取、计算功能
类图:
常量
- kMicroSecondsPerSecond表示每秒所对应的微秒数
成员变量
- microSecondsSinceEpoch_表示到1970-01-01 00:00:00 UTC的微秒数
成员函数
- swap()交换操作
- toString()、toFormattedString()将时间转换为string类型或指定格式,
- valid()判断Timestamp是否有效,
- invalid()返回一个无效的Timestamp,
- now()返回当前时间的Timestamp,
- secondsSinceEpoch()/microSecondsSinceEpoch()返回到1970-01-01 00:00:00 UTC的秒数/微秒数。
二、主要知识点:
- BOOST_STATIC_ASSERT//编译时断言,让错误发生在编译时,(assert是运行时断言)
- muduo::copyable//空基类,标识该类是可拷贝的值类型,拷贝之后与原对象脱离关系,深拷贝(c++内置类型都是深拷贝)声明周期便于管理。(对象语义,要么不能拷贝,要么可以拷贝,但是拷贝之后与原对象共享底层资源,声明周期管理一般通过智能指针进行)
- boost::less_than_comparable<>//继承模板类,要求实现<,可自动实现>,<=,>=
- PRId64:int64_t用来表示64位整数,在32位系统中是long long int,在64位系统中是long int,所以打印int64_t的格式化方法是:
printf(“%ld”, value); // 64bit OS
printf("%lld", value); // 32bit OS
跨平台的做法:
#define __STDC_FORMAT_MACROS
#include <inttypes.h>//在该头文件中定义了PRI64
#undef __STDC_FORMAT_MACROS
printf("%" PRId64 "\n", value);
三、测试程序:
首先,将base库目录下的Timestamp.h、Timestamp.cc、Types.h拷贝到自己新建的目录下,同时拷贝编译脚本和CMakeLists
整个目录结构为:
经过编译,我们可以生成一个静态库libmuduo_base.a
接下来,拷贝Timestamp_unittest.cc,(功能-获取当前时间;计算时间差)重新编译
验证timestamp类功能,在build/debug/bin下运行timestamp_unittest
接下来,来实战编译时断言,在base下新建bsa.cc
内容为:
进行编译,即可以在编译时观察到断言错误。