std::ctype_byname

来自cppreference.com
< cpp‎ | locale
在标头 <locale> 定义
template< class CharT >
class ctype_byname : public std::ctype<CharT>;

std::ctype_byname 是一个封装了在它构造时指定的本地环境的字符分类规则的 std::ctype 平面。

特化

标准库保证提供以下特化:

在标头 <locale> 定义
std::ctype_byname<char> 提供窄字符分类。此分类用表格查找字符分类
std::ctype_byname<wchar_t> 提供宽字符分类

成员类型

成员类型 定义
mask typename std::ctype<CharT>::mask

成员函数

(构造函数)
构造新的 ctype_byname 平面
(公开成员函数)
(析构函数)
析构 ctype_byname 平面
(受保护成员函数)

std::ctype_byname::ctype_byname

explicit ctype_byname( const char* name, std::size_t refs = 0 );
explicit ctype_byname( const std::string& name, std::size_t refs = 0 );
(C++11 起)

为名为 name 的本地环境构造新的 std::ctype_byname 平面。

refs 用于资源管理:在销毁最后一个保有平面的 std::locale 对象时,如果 refs == 0,那么实现会销毁平面对象。否则不销毁对象。

参数

name - 本地环境的名称
refs - 链接到该平面的引用数

std::ctype_byname::~ctype_byname

protected:
~ctype_byname();

销毁平面。

继承自 std::ctype<CharT>

成员类型

成员类型 定义
char_type CharT

成员对象

成员名 类型
static std::locale::id id
[静态]
本地环境的 id
(公开静态成员常量)
如果 CharTchar,那么继承 std::ctype<char> 的下列成员
static const std::size_t table_size
[静态]
分类表的大小,至少 256
(公开静态成员常量)

成员函数

调用 do_is
(std::ctype<CharT> 的公开成员函数)
调用 do_scan_is
(std::ctype<CharT> 的公开成员函数)
调用 do_scan_not
(std::ctype<CharT> 的公开成员函数)
调用 do_toupper
(std::ctype<CharT> 的公开成员函数)
调用 do_tolower
(std::ctype<CharT> 的公开成员函数)
调用 do_widen
(std::ctype<CharT> 的公开成员函数)
调用 do_narrow
(std::ctype<CharT> 的公开成员函数)
如果 CharTchar,那么继承 std::ctype<char> 的下列成员
获得字符分类表
(std::ctype<char> 的公开成员函数)
获得 "C" 本地环境字符分类表
(std::ctype<char> 的公开静态成员函数)

受保护成员函数

转换一个或多个字符为大写
(std::ctype<CharT> 的虚受保护成员函数)
转换一个或多个字符为小写
(std::ctype<CharT> 的虚受保护成员函数)
将一个或多个字符从 char 转换到 CharT
(std::ctype<CharT> 的虚受保护成员函数)
将一个或多个字符从 CharT 转换到 char
(std::ctype<CharT> 的虚受保护成员函数)
如果 CharTchar,那么不继承 std::ctype 的下列成员
[虚]
分类字符或字符序列
(std::ctype<CharT> 的虚受保护成员函数)
定位序列中首个符合给定分类的字符
(std::ctype<CharT> 的虚受保护成员函数)
定位序列中首个不符合给定分类的字符
(std::ctype<CharT> 的虚受保护成员函数)

继承自 std::ctype_base

成员类型

类型 定义
mask 未指定的位掩码类型(枚举、整数类型或 bitset)

成员常量

space
[静态]
鉴别空白字符分类的 mask
(公开静态成员常量)
print
[静态]
鉴别可打印字符分类的 mask
(公开静态成员常量)
cntrl
[静态]
鉴别控制字符分类的 mask
(公开静态成员常量)
upper
[静态]
鉴别大写字符分类的 mask
(公开静态成员常量)
lower
[静态]
鉴别小写字符分类的 mask
(公开静态成员常量)
alpha
[静态]
鉴别字母字符分类的 mask
(公开静态成员常量)
digit
[静态]
鉴别数字字符分类的 mask
(公开静态成员常量)
punct
[静态]
鉴别标点字符分类的 mask
(公开静态成员常量)
xdigit
[静态]
鉴别十六进制数字字符分类的 mask
(公开静态成员常量)
blank
[静态] (C++11)
鉴别空格字符分类的 mask
(公开静态成员常量)
alnum
[静态]
alpha | digit
(公开静态成员常量)
graph
[静态]
alnum | punct
(公开静态成员常量)

注意

C++11 前显式特化 std::ctype_byname<char> 作为单独入口列于头文件 <locale>。因为 LWG 问题 1298 被移除,但它仍是被要求的特化,只是像 std::ctype_byname<wchar_t> 一般。

示例

#include <iostream>
#include <locale>
 
int main()
{
    wchar_t c = L'\u00de'; // 大写字母 thorn
 
    std::locale loc("C");
 
    std::cout << "isupper('Þ', C 本地环境) 返回 "
               << std::boolalpha << std::isupper(c, loc) << '\n';
 
    loc = std::locale(loc, new std::ctype_byname<wchar_t>("en_US.utf8"));
 
    std::cout << "isupper('Þ', 带有 Unicode ctype 的 C 本地环境) 返回 "
              << std::boolalpha << std::isupper(c, loc) << '\n';
}

输出:

isupper('Þ', C 本地环境) 返回 false
isupper('Þ', 带有 Unicode ctype 的 C 本地环境) 返回 true

缺陷报告

下列更改行为的缺陷报告追溯地应用于以前出版的 C++ 标准。

缺陷报告 应用于 出版时的行为 正确行为
LWG 16 C++98 显式特化 std::ctype_byname<char> 的定义错误地指定了 do_narrow 的名字和形参列表 已改正
LWG 616 C++98 mask 的定义中缺失了 typename 消歧义符 已补充

参阅

定义字符分类表
(类模板)
std::ctype 对于 char 类型的特化
(类模板特化)