命名空间
变体
操作

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 用于资源管理:如果 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 是区域设置的标识符
(公共静态成员常量)
如果 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 未指定的位掩码类型(枚举、整数类型或位集)

成员常量

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 的特化
(类模板特化) [编辑]