std::ctype_byname
来自 cppreference.com
定义在头文件 <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 用于资源管理:如果 refs == 0,则实现会在最后一个持有它的 std::locale 对象被销毁时销毁构面。否则,该对象不会被销毁。
参数
name | - | 区域设置的名称 |
refs | - | 链接到该构面的引用数量 |
std::ctype_byname::~ctype_byname
protected: ~ctype_byname(); |
||
销毁该构面。
从 std::ctype<CharT> 继承而来
成员类型
成员类型 | 定义 |
char_type
|
CharT
|
成员对象
成员名称 | 类型 |
static std::locale::id id [静态] |
id 是区域设置的标识符 (公共静态成员常量) |
如果
| |
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> 的公共成员函数) | |
如果
| |
获取字符分类表 ( std::ctype<char> 的公共成员函数) | |
[静态] |
获取“C”语言环境字符分类表 ( std::ctype<char> 的公共静态成员函数) |
受保护的成员函数
[虚函数] |
将一个或多个字符转换为大写 ( std::ctype<CharT> 的虚拟受保护成员函数) |
[虚函数] |
将一个或多个字符转换为小写 ( std::ctype<CharT> 的虚拟受保护成员函数) |
[虚函数] |
将一个或多个字符从 char 转换为 CharT ( std::ctype<CharT> 的虚拟受保护成员函数) |
[虚函数] |
将一个或多个字符从 CharT 转换为 char( std::ctype<CharT> 的虚拟受保护成员函数) |
如果
| |
[虚函数] |
对单个字符或字符序列进行分类 ( std::ctype<CharT> 的虚拟受保护成员函数) |
[虚函数] |
在字符序列中找到第一个符合给定分类的字符 ( std::ctype<CharT> 的虚拟受保护成员函数) |
[虚函数] |
在字符序列中找到第一个不符合给定分类的字符 ( std::ctype<CharT> 的虚拟受保护成员函数) |
从 std::ctype_base 继承
成员类型
类型 | 定义 |
mask
|
未指定的位掩码类型(枚举、整数类型或位集) |
成员常量
space [静态] |
mask 的值,用于标识空白字符分类(公共静态成员常量) |
print [静态] |
mask 的值,用于标识可打印字符分类(公共静态成员常量) |
cntrl [静态] |
mask 的值,用于标识控制字符分类(公共静态成员常量) |
upper [静态] |
mask 的值,用于标识大写字符分类(公共静态成员常量) |
lower [静态] |
mask 的值,用于标识小写字符分类(公共静态成员常量) |
alpha [静态] |
mask 的值,用于标识字母字符分类(公共静态成员常量) |
digit [静态] |
mask 的值,用于标识数字字符分类(公共静态成员常量) |
punct [静态] |
mask 的值,用于标识标点符号字符分类(公共静态成员常量) |
xdigit [静态] |
mask 的值,用于标识十六进制数字字符分类(公共静态成员常量) |
blank [static] (C++11) |
mask 的值,用于标识空白字符分类(公共静态成员常量) |
alnum [静态] |
alpha | digit (公共静态成员常量) |
graph [静态] |
alnum | punct (公共静态成员常量) |
[编辑] 备注
显式特化 std::ctype_byname<char> 在 C++11 之前列在头文件 <locale> 中的单独条目中。 它被移除,原因是 LWG 问题 1298,但它仍然是必需的特化,就像 std::ctype_byname<wchar_t> 一样。
[编辑] 示例
运行此代码
#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
[编辑] 缺陷报告
以下行为更改缺陷报告已追溯应用于之前发布的 C++ 标准。
DR | 应用于 | 发布的行为 | 正确的行为 |
---|---|---|---|
LWG 16 | C++98 | 显式特化 std::ctype_byname<char> 的定义 错误指定了 do_narrow 的名称和参数列表 |
已更正 |
LWG 616 | C++98 | mask 的定义中缺少 typename 消歧符 |
已添加 |
[编辑] 另请参阅
定义字符分类表 (类模板) | |
std::ctype 针对类型 char 的特化 (类模板特化) |