Namespaces
Variants

std:: ctype_byname

From cppreference.net
定义于头文件 <locale>
template < class CharT >
class ctype_byname : public std:: ctype < CharT > ;

std::ctype_byname 是一个 std::ctype 区域设置 facet,它封装了在构造时指定的区域设置的字符分类规则。

目录

特化

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

定义于头文件 <locale>
std :: ctype_byname < char > 提供窄字符分类(使用查表法进行字符分类)
std :: ctype_byname < wchar_t > 提供宽字符分类

嵌套类型

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

成员函数

(constructor)
构造新的 ctype_byname facet
(公开成员函数)
(destructor)
销毁 ctype_byname facet
(受保护成员函数)

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 ) ;
(since C++11)

构造一个具有指定名称 name 的区域设置的 std::ctype_byname 平面。

refs 用于资源管理:若 refs == 0 ,当最后一个持有该平面的 std::locale 对象被销毁时,实现将销毁该平面。否则,该对象不会被销毁。

参数

name - 区域设置的名称
refs - 链接到该平面的引用数量

std::ctype_byname:: ~ctype_byname

protected :
~ctype_byname ( ) ;

销毁该facet。

继承自 std:: ctype <CharT> (仅当 CharT 不是 char 时)

嵌套类型

类型 定义
char_type CharT

数据成员

成员 描述
std::locale::id id [static] facet 的标识符

成员函数

调用 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> 的公开成员函数)

受保护成员函数

[virtual]
将字符或字符序列转换为大写
std::ctype<CharT> 的虚受保护成员函数)
[virtual]
将字符或字符序列转换为小写
std::ctype<CharT> 的虚受保护成员函数)
[virtual]
将字符或字符序列从 char 转换为 CharT
std::ctype<CharT> 的虚受保护成员函数)
[virtual]
将字符或字符序列从 CharT 转换为 char
std::ctype<CharT> 的虚受保护成员函数)
[virtual]
对字符或字符序列进行分类
std::ctype<CharT> 的虚受保护成员函数)
[virtual]
定位序列中符合给定分类的首个字符
std::ctype<CharT> 的虚受保护成员函数)
[virtual]
定位序列中不符合给定分类的首个字符
std::ctype<CharT> 的虚受保护成员函数)

继承自 std:: ctype<char> (仅当 CharT char 时)

嵌套类型

类型 定义
char_type char

数据成员

成员 描述
std::locale::id id [static] facet 的标识符
const std:: size_t table_size [static] 分类表的大小,至少为 256

成员函数

获取字符分类表
std::ctype <char> 的公开成员函数)
获取 "C" 区域设置的字符分类表
std::ctype <char> 的公开静态成员函数)
使用分类表对字符或字符序列进行分类
std::ctype <char> 的公开成员函数)
使用分类表定位序列中符合给定分类的第一个字符
std::ctype <char> 的公开成员函数)
使用分类表定位序列中不符合给定分类的第一个字符
std::ctype <char> 的公开成员函数)
调用 do_toupper
std::ctype<CharT> 的公开成员函数)
调用 do_tolower
std::ctype<CharT> 的公开成员函数)
调用 do_widen
std::ctype<CharT> 的公开成员函数)
调用 do_narrow
std::ctype<CharT> 的公开成员函数)

受保护成员函数

[virtual]
将一个或多个字符转换为大写
std::ctype<CharT> 的虚受保护成员函数)
[virtual]
将一个或多个字符转换为小写
std::ctype<CharT> 的虚受保护成员函数)
[virtual]
将一个或多个字符从 char 转换为 CharT
std::ctype<CharT> 的虚受保护成员函数)
[virtual]
将一个或多个字符从 CharT 转换为 char
std::ctype<CharT> 的虚受保护成员函数)

继承自 std:: ctype_base

嵌套类型

类型 定义
mask 未指定的 BitmaskType 类型(枚举、整数类型或位集)

成员常量

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

注释

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 locale) returned "
              << std::boolalpha << std::isupper(c, loc) << '\n';
    loc = std::locale(loc, new std::ctype_byname<wchar_t>("en_US.utf8"));
    std::cout << "isupper('Þ', C locale with Unicode ctype) returned "
              << std::boolalpha << std::isupper(c, loc) << '\n';
}

输出:

isupper('Þ', C locale) returned false
isupper('Þ', C locale with Unicode ctype) returned true

缺陷报告

以下行为变更缺陷报告被追溯应用于先前发布的C++标准。

缺陷报告 适用标准 发布时行为 正确行为
LWG 16 C++98 显式特化 std :: ctype_byname < char >
错误指定了 do_narrow 的名称和参数列表
已修正
LWG 616 C++98 typename 消歧符在 mask 的定义中缺失 已添加

参见

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