std::ctype_byname
来自 cppreference.cn
定义于头文件 <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) |
(析构函数) |
销毁一个 ctype_byname facet(protected member function) |
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> 的公共成员函数) | |
调用 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 [静态] |
标识空白字符分类的 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] 另请参阅
定义字符分类表 (类模板) | |
std::ctype 对于类型 char 的特化 (类模板特化) |