C++的Char traits模板类

2023-05-16

Char_traits

 

头文件

Char_traits.h

 

// Generic char_traits class.  Note that this class is provided only

//  as a base for explicit specialization; it is unlikely to be useful

//  as is for any particular user-defined type.  In particular, it

//  *will not work* for a non-POD type.

 

字符特性模板,目的是提供最基本的字符特性的统一的方法函数。

char_traits继承了__char_traits_base

 

template <class _CharT> class char_traits

  : public __char_traits_base<_CharT, _CharT>

{};

 

// Specialization for char.

// char字符类型模板偏特化

 

__STL_TEMPLATE_NULL class char_traits<char>

  : public __char_traits_base<char, int>

{

public:

  //int类型到char类型的转换

  static char_type to_char_type(const int_type& __c) {

    return static_cast<char_type>(static_cast<unsigned char>(__c));

  }

 

 //char到int类型的转换

  static int_type to_int_type(const char_type& __c) {

    return static_cast<unsigned char>(__c);

  }

 

  //比较两个字符串

  static int compare(const char* __s1, const char* __s2, size_t __n)

    { return memcmp(__s1, __s2, __n); }

 

  //到字符的长度

  static size_t length(const char* __s) { return strlen(__s); }

 

  //字符赋值

  static void assign(char& __c1, const char& __c2) { __c1 = __c2; }

 

  //字串赋值

  static char* assign(char* __s, size_t __n, char __c)

    { memset(__s, __c, __n); return __s; }

};

 

// Specialization for wchar_t.

// 宽字符类型模板偏特化

 

__STL_TEMPLATE_NULL class char_traits<wchar_t>

  : public __char_traits_base<wchar_t, wint_t>

{};

 

// Class __char_traits_base.

// 字符特性基类

 

template <class _CharT, class _IntT> class __char_traits_base {

public:

  typedef _CharT char_type;   // 字符类型

  typedef _IntT int_type;     // int类型

#ifdef __STL_USE_NEW_IOSTREAMS

  typedef streamoff off_type;

  typedef streampos pos_type;

  typedef mbstate_t state_type;

#endif /* __STL_USE_NEW_IOSTREAMS */

 

  // 字符赋值

  static void assign(char_type& __c1, const char_type& __c2) { __c1 = __c2; }

 

  // 字符比较

  static bool eq(const _CharT& __c1, const _CharT& __c2)

{ return __c1 == __c2; }

 

  // 字符大小比较

  static bool lt(const _CharT& __c1, const _CharT& __c2)

{ return __c1 < __c2; }

 

  // 字串比较

  static int compare(const _CharT* __s1, const _CharT* __s2, size_t __n) {

    for (size_t __i = 0; __i < __n; ++__i)

      if (!eq(__s1[__i], __s2[__i]))

        return __s1[__i] < __s2[__i] ? -1 : 1;

    return 0;

  }

 

  // 字串长度

  static size_t length(const _CharT* __s) {

    const _CharT __nullchar = _CharT();

    size_t __i;

    for (__i = 0; !eq(__s[__i], __nullchar); ++__i)

      {}

    return __i;

  }

 

  // 在串中查找字符

  static const _CharT* find(const _CharT* __s, size_t __n, const _CharT& __c)

  {

    for ( ; __n > 0 ; ++__s, --__n)

      if (eq(*__s, __c))

        return __s;

    return 0;

  }

 

  // 字符串移到另一字符串

  static _CharT* move(_CharT* __s1, const _CharT* __s2, size_t __n) {

    memmove(__s1, __s2, __n * sizeof(_CharT));

    return __s1;

  }

 

  //拷贝一字符串到另字符串

  static _CharT* copy(_CharT* __s1, const _CharT* __s2, size_t __n) {

    memcpy(__s1, __s2, __n * sizeof(_CharT));

    return __s1;

  }

 

  // 字符串赋值

  static _CharT* assign(_CharT* __s, size_t __n, _CharT __c) {

    for (size_t __i = 0; __i < __n; ++__i)

      __s[__i] = __c;

    return __s;

  }

 

  // 判断是否为结束符

  static int_type not_eof(const int_type& __c) {

    return !eq_int_type(__c, eof()) ? __c : 0;

  }

 

  // int到char类型的转换

  static char_type to_char_type(const int_type& __c) {

    return static_cast<char_type>(__c);

  }

 

  // char到int类型的转换

  static int_type to_int_type(const char_type& __c) {

    return static_cast<int_type>(__c);

  }

 

  // 判断俩int类型是否相等

  static bool eq_int_type(const int_type& __c1, const int_type& __c2) {

    return __c1 == __c2;

  }

 

  // 返回结束整型值

  static int_type eof() {

    return static_cast<int_type>(-1);

  }

};

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C++的Char traits模板类 的相关文章

随机推荐

  • 内网自建yum源和apt源(含各信创系统)

    现在Linux下面软件基本是通过yum apt等从软件仓库在线安装 xff0c 大的Linux发行版都有自己的软件仓库 如CentOS RedHat使用yum方式仓库 xff0c ubuntu使用apt方式仓库 很多政企单位内部网络是和互联
  • 国产信创Linux桌面系统比较:软件包格式及软件管理、桌面环境及桌面应用

    信创产业中 xff0c 操作系统开始整合 xff0c 基本上集中在银河麒麟V10和UOS2 xff0c 很多朋友问到各种国产信创Linux系统的区别和比较 因此结合前期写的几篇文章 xff0c 对这个问题再进行了整理 以龙芯CPU为例 xf
  • Date类型转换为字符串类型

    Date date 61 new Date SimpleDateFormat fmt 61 new SimpleDateFormat 34 yyyy MM dd HH mm ss 34 String dateStr 61 fmt forma
  • 《机关单位办公自动化应用指南 (基于国产信息技术应用创新终端)》与银河麒麟V10

    机关单位办公自动化应用指南 基于国产信息技术应用创新终端 一书适合各国产Linux桌面系统 xff0c 但是举例说明基本是基于中标麒麟V7 银河麒麟V10和中标麒麟V7都采用MATE桌面 xff0c 对于普通用户桌面操作而言差别不大 xff
  • NFS故障:Stale NFS file handle的解决一例

    故障描述 xff1a 一台备份一体机设备作为NFS服务端 xff0c export了目录 infokit exportnfs xff0c 从其他设备上挂载这个NFS 目录 xff0c 在NFS服务端和客户端及其上showmount e 都一
  • CentOS7部署nextcloud最新版本

    Nextcloud 是一个免费专业的私有云存储网盘 开源 项目 xff0c Nextcloud开发人员来自owncloud Nextcloud 跨平台支持 Windows Mac Android iOS Linux 等平台 xff0c 提供
  • SQL表间操作

    MySQL表间操作 近期需要对数据进行整理 xff0c 涉及多个安全产品的数据库 xff0c 基本都是MySQL的 xff0c 经常需要进行表的合并 整理操作 MySQL常见的求交集 并集和差集 1 select a b from tabl
  • ipref网络性能评估工具

    ipref网络性能评估工具 基本介绍 网络的主要性能参数包括带宽 xff0c 时延 xff0c 抖动和丢包率 xff0c 用一个名词就是QOS xff08 服务质量 xff09 Iperf xff08 可测丢包率 xff09 可以用来测量网
  • 抓取特定DNS查询包:tcpdump vs wireshark

    近期 xff0c 在办公网络中出现网络不稳定问题 xff0c 经过分析发现是网内大量的终端安装的安全软件 xff0c 每秒钟都定期进行地址探测 xff0c 其中需要探测taobao com之类的域名地址 xff0c 造成大量的DNS查询 x
  • ceph——数据修复/均衡速度测试

    以副本环境的数据均衡为例 xff0c 以下需要注意 xff1a 1 写入数据时 xff0c 用脚本监控写入数据量 xff08 ceph df xff09 到达预定值 xff0c 开始 停止cosbench cosbench支持命令行 进入c
  • iOS 卡顿、掉帧原因+优化

    卡顿 掉帧原因 VSync垂直信号 xff0c 一般说页面流畅是60fps xff0c 也就是每一秒钟会有60帧画面更新 xff0c 相当于16 7ms就要产生一帧画面 xff0c 那么在这16 7ms之内需要由CPU和GPU共同协同完成产
  • archlinux 安装virtualbox

    一 安装前准备 首先安装 linux headers sudo pacman S linux headers 其次确认linux内核的版本 uname r 如果和header的版本不一致 xff0c 需要更新内核 否则的话会在安装virtu
  • debian 切换默认桌面命令

    update alternatives config x session manager 选择gnome session
  • 解决windows系统80端口被占用问题_

    测试这个命令会把打印机共享等依赖http服务的程序停止 xff0c 导致共享无法使用 xff0c 所以还得寻找别的办法 xff0c 后来终于搜索到一条命令 netsh http show servicestate 1 这条命令可以查看到底是
  • Linux项目自动化构建工具---make/Makefile

    make Makefile 1 背景1 1 如何编写Makefile1 1 1 依赖关系1 1 2 依赖方法1 1 3 项目清理 2 Linux第一个小程序 进度条2 1 回车和换行概念2 2 行缓冲区概念2 3 完整的进度条代码和解析 1
  • IntelliJ Rider2020+Unity+EmmyLua调试的两种方式

    Rider2018 3 1版本中是可以直接附加Unity xff0c 很不错 xff0c 就是调试有几率崩溃 一直想升级到最新版来解决调试不稳定的问题 但将Rider2018 3 1更新到Rider2020 2 1后 xff0c EmmyL
  • Edge浏览器黑色背景设置

    1 打开Edge浏览器 xff0c 点击右上角的三个点 xff0c 选择 扩展 选项 xff0c 如下图 xff1a 2 搜索Dark Reader xff0c 点击 获取 3 点击开启 4 Edge浏览器 设置 外观 主体中选择雨夜模式
  • time(0) 是什么意思?

    time 0 返回的是系统的时间 xff08 从1970 1 1午夜算起 xff09 xff0c 单位 xff1a 秒 time 参数一般为0或者Null相当于 取系统时间 include lt iostream gt include lt
  • 函数指针、表驱动用法

    函数指针 xff08 1 xff09 函数指针含义 函数 在C语言中 xff0c 函数作为功能完成的基本单位 xff0c 它的定义如下 xff1a FunctionType FuncName ArgumentList FunctionBod
  • C++的Char traits模板类

    Char traits 头文件 Char traits h Generic char traits class Note that this class is provided only as a base for explicit spe