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

目前在学习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)

相关推荐

  1. 数据分析简单项目总结

    2024-01-16 20:14:05       62 阅读
  2. 简单实现Spring容器()

    2024-01-16 20:14:05       55 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-01-16 20:14:05       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-01-16 20:14:05       101 阅读
  3. 在Django里面运行非项目文件

    2024-01-16 20:14:05       82 阅读
  4. Python语言-面向对象

    2024-01-16 20:14:05       91 阅读

热门阅读

  1. MyBatis

    MyBatis

    2024-01-16 20:14:05      43 阅读
  2. SSH服务

    SSH服务

    2024-01-16 20:14:05      54 阅读
  3. Redis实现延迟任务队列(一)

    2024-01-16 20:14:05       48 阅读
  4. Redis 基础使用

    2024-01-16 20:14:05       39 阅读
  5. 设计模式复盘

    2024-01-16 20:14:05       54 阅读
  6. yolov5s.yaml 文件解读

    2024-01-16 20:14:05       47 阅读
  7. cookie、Web Storage

    2024-01-16 20:14:05       49 阅读