MyTinySTL 简单分析(二)--util.h exceptdef.h

发布时间:2024年01月16日

目前在学习STL,看到一个开源的项目MyTinySTL,非常不错。想着照着这个代码自己敲一遍应该也能有些进步。然后就开始了学习过程。

首先分析的是vector

以下是由vector.h关联的所有头文件

本篇分析一下util.h , xxx

这里先来研究几个函数

std::enable_if

std::is_constructible

std::is_default_constructible

std::is_copy_constructible<U1

std::is_convertible

首先看std::enable_if的定义:

// Primary template. (基本定义)
/// Define a member typedef @c type only if a boolean constant is true.
template<bool, typename _Tp = void>
?struct enable_if
?{ };

// Partial specialization for true.?(偏特化版本)
template<typename _Tp>
?struct enable_if<true, _Tp>
?{ typedef _Tp type; };

根据以上定义可以看出,如果std::enable_if的第一个参数为true,则把第二个模板参数定义为type,否则什么都没有。

后面的三个定义

std::is_constructible?, std::is_default_constructiblestd::is_copy_constructible有如下的继承关系

这几个类用于判断是否能够构造对象,它们有一个成员变量value,是true或false

std::is_convertible?是判断能否转换

了解了以上函数的作用后,来看util.h会简单一些。

该文件中先定义了右值转发(move)、完美转发(forward)

然后定义了swap相关

然后定义了pair结构体,该结构体有两个成员变量,有几个构造函数,

构造函数包括默认构造函数,隐式转化构造函数,等等 ; 重载了赋值操作符,swap函数,== 操作符。

然后还在最外面重载了两个pair的比较操作符(==, <, !=, > 等等),以及针对pair的swap函数,和如何构造一个pair的make_pair函数。

=============================================

exceptdef.h?文件定义了几个有关异常的宏

#define MYSTL_DEBUG(expr) \
?assert(expr) ?

#define THROW_LENGTH_ERROR_IF(expr, what) \
?if ((expr)) throw std::length_error(what)

#define THROW_OUT_OF_RANGE_IF(expr, what) \
?if ((expr)) throw std::out_of_range(what)

#define THROW_RUNTIME_ERROR_IF(expr, what) \
?if ((expr)) throw std::runtime_error(what)

文章来源:https://blog.csdn.net/gengxt2003/article/details/135632628
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。