命名空间
变体
操作

std::ctype_byname

来自 cppreference.cn
< cpp‎ | locale
 
 
 
 
定义于头文件 <locale>
template< class CharT >
class ctype_byname : public std::ctype<CharT>;

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

目录

[edit] 特化

标准库保证提供以下特化

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

[edit] 嵌套类型

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

[edit] 成员函数

(构造函数)
构造一个新的 ctype_byname facet
(public member function) [edit]
(析构函数)
销毁一个 ctype_byname facet
(protected member function) [edit]

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 facet。

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

参数

name - 区域设置的名称
refs - 链接到 facet 的引用计数

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> 的公共成员函数) [edit]
调用 do_scan_is
(std::ctype<CharT> 的公共成员函数) [edit]
调用 do_scan_not
(std::ctype<CharT> 的公共成员函数) [edit]
调用 do_toupper
(std::ctype<CharT> 的公共成员函数) [edit]
调用 do_tolower
(std::ctype<CharT> 的公共成员函数) [edit]
调用 do_widen
(std::ctype<CharT> 的公共成员函数) [edit]
调用 do_narrow
(std::ctype<CharT> 的公共成员函数) [edit]

受保护的成员函数

[virtual]
将一个或多个字符转换为大写
(std::ctype<CharT> 的虚保护成员函数) [edit]
[virtual]
将一个或多个字符转换为小写
(std::ctype<CharT> 的虚保护成员函数) [edit]
[virtual]
将一个或多个字符从 char 转换为 CharT
(std::ctype<CharT> 的虚保护成员函数) [edit]
[virtual]
将一个或多个字符从 CharT 转换为 char
(std::ctype<CharT> 的虚保护成员函数) [edit]
[virtual]
分类一个字符或一个字符序列
(std::ctype<CharT> 的虚保护成员函数) [edit]
[virtual]
在一个序列中定位第一个符合给定分类的字符
(std::ctype<CharT> 的虚保护成员函数) [edit]
[virtual]
在一个序列中定位第一个不符合给定分类的字符
(std::ctype<CharT> 的虚保护成员函数) [edit]

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

嵌套类型

类型 定义
char_type char

数据成员

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

成员函数

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

受保护的成员函数

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

继承自 std::ctype_base

嵌套类型

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

成员常量

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

[edit] 注意

std::ctype_byname<char><locale> 的概要中被错误地声明为显式特化,并且该声明已根据 LWG issue 1298 的决议删除,但它仍然是必需的特化,就像 std::ctype_byname<wchar_t> 一样。

[edit] 示例

#include <iostream>
#include <locale>
 
int main()
{
    wchar_t c = L'\u00de'; // capital letter 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

[edit] 缺陷报告

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

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

[edit] 另请参阅

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