标准库标头 <locale>
来自cppreference.com
此标头是文本处理库的一部分。
类 | |
一组用来封装文化差异的多态刻面的集合 (类) | |
字符串与流转换 | |
(C++11)(C++17 弃用)(C++26 移除) | 进行宽字符串和字节字符串之间的转换 (类模板) |
(C++11)(C++17 弃用)(C++26 移除) | 进行字节流缓冲区和宽流缓冲区间的转换 (类模板) |
刻面类别的基类 | |
定义字符分类类别 (类) | |
定义字符转换错误 (类) | |
定义消息目录类型 (类) | |
定义日期格式常量 (类) | |
定义货币格式化模式 (类) | |
刻面类别 | |
定义字符分类表 (类模板) | |
std::ctype 对于 char 类型的特化 (类模板特化) | |
在字符编码间转换,包括 UTF-8、UTF-16、UTF-32 (类模板) | |
定义字典序比较和字符串的散列 (类模板) | |
实现从消息目录获取字符串 (类模板) | |
从输入字符序列中解析时间/日期值到 std::tm 中 (类模板) | |
格式化 std::tm 内容为字符序列以输出 (类模板) | |
解析输入字符序列中的数字值 (类模板) | |
格式化数值为字符序列以输出 (类模板) | |
定义数值标点规则 (类模板) | |
从输入字符序列中解析并构造货币值 (类模板) | |
格式化货币值为字符序列以输出 (类模板) | |
定义 std::money_get 与 std::money_put 所用的货币格式解析器的参数 (类模板) | |
特定于本地环境的刻面类别 | |
表示系统提供的具名本地环境的 std::ctype (类模板) | |
表示系统提供的具名本地环境的 std::codecvt (类模板) | |
表示系统提供的具名本地环境的 std::messages (类模板) | |
表示系统提供的具名本地环境的 std::collate (类模板) | |
表示系统提供的具名本地环境的 std::time_get (类模板) | |
表示系统提供的具名本地环境的 std::time_put (类模板) | |
表示系统提供的具名本地环境的 std::numpunct (类模板) | |
表示系统提供的具名本地环境的 std::moneypunct (类模板) | |
函数 | |
本地环境与刻面 | |
从本地环境获得一个刻面 (函数模板) | |
检查本地环境是否实现特定的刻面 (函数模板) | |
字符分类 | |
检查字符是否被本地环境分类为空白 (函数模板) | |
(C++11) | 检查字符是否被本地环境分类为空格字符 (函数模板) |
检查字符是否被本地环境分类为控制字符 (函数模板) | |
检查字符是否被本地环境分类为大写 (函数模板) | |
检查字符是否被本地环境分类为小写 (函数模板) | |
检查字符是否被本地环境分类为字母 (函数模板) | |
检查字符是否被本地环境分类为数字 (函数模板) | |
检查字符是否被本地环境分类为标点 (函数模板) | |
检查字符是否被本地环境分类为十六进制数字 (函数模板) | |
检查字符是否被本地环境分类为字母或数字 (函数模板) | |
检查字符是否被本地环境分类为可打印字符 (函数模板) | |
检查字符是否被本地环境分类为图形字符 (函数模板) | |
字符转换 | |
用本地环境的 ctype 刻面将字符转换成大写 (函数模板) | |
用本地环境的 ctype 刻面将字符转换成小写 (函数模板) |
[编辑]概要
namespace std { // 本地环境:class locale;template<class Facet>const Facet& use_facet(const locale&);template<class Facet>bool has_facet(const locale&)noexcept; // 便利接口:template<class CharT>bool isspace (CharT c, const locale& loc);template<class CharT>bool isprint (CharT c, const locale& loc);template<class CharT>bool iscntrl (CharT c, const locale& loc);template<class CharT>bool isupper (CharT c, const locale& loc);template<class CharT>bool islower (CharT c, const locale& loc);template<class CharT>bool isalpha (CharT c, const locale& loc);template<class CharT>bool isdigit (CharT c, const locale& loc);template<class CharT>bool ispunct (CharT c, const locale& loc);template<class CharT>bool isxdigit(CharT c, const locale& loc);template<class CharT>bool isalnum (CharT c, const locale& loc);template<class CharT>bool isgraph (CharT c, const locale& loc);template<class CharT> CharT toupper(CharT c, const locale& loc);template<class CharT> CharT tolower(CharT c, const locale& loc);template<class Codecvt, class Elem =wchar_t, class Wide_alloc =std::allocator<Elem>, class Byte_alloc =std::allocator<char>>class wstring_convert;template<class Codecvt, class Elem =wchar_t, class Tr = char_traits<Elem>>class wbuffer_convert; // 字符类型:class ctype_base;template<class CharT>class ctype;template<>class ctype<char>;// 特化template<class CharT>class ctype_byname;class codecvt_base;template<class internT, class externT, class stateT>class codecvt;template<class internT, class externT, class stateT>class codecvt_byname; // 数值:template<class CharT, class InputIter = istreambuf_iterator<CharT>>class num_get;template<class CharT, class OutputIter = osterambuf_iterator<CharT>>class num_put;template<class CharT>class numpunct;template<class CharT>class numpunct_byname; // 校排:template<class CharT>class collate;template<class CharT>class collate_byname; // 日期与时间:class time_base;template<class CharT, class InputIter = istreambuf_iterator<CharT>>class time_get;template<class CharT, class InputIter>= istreambuf_iterator<CharT>>class time_get_byname;template<class CharT, class OutputIter>= ostreambuf_iterator<CharT>>class time_put;template<class CharT, class OutputIter>= ostreambuf_iterator<CharT>>class time_put_byname; // 货币:class money_base;template<class CharT, class InputIter = istreambuf_iterator<CharT>>>class money_get;template<class CharT, class OutputIter = ostreambuf_iterator<CharT>>>class money_put;template<class CharT, bool Intl =false>class moneypunct;template<class CharT, bool Intl =false>class moneypunct_byname; // 消息获取:class messages_base;template<class CharT>class messages;template<class CharT>class messages_byname;}
[编辑]类 std::locale
class locale {public:// 类型:class facet;class id;typedefint category;staticconst category // 此处所赋之值仅用于阐释 none =0, collate =0x010, ctype =0x020, monetary =0x040, numeric =0x080, time =0x100, messages =0x200, all = collate | ctype | monetary | numeric | time | messages; // 构造/复制/销毁: locale()noexcept; locale(const locale& other)noexcept;explicit locale(constchar* std_name);explicit locale(const string& std_name); locale(const locale& other, constchar* std_name, category); locale(const locale& other, const string& std_name, category);template<class Facet> locale(const locale& other, Facet* f); locale(const locale& other, const locale& one, category); ~locale(); // 非虚函数const locale& operator=(const locale& other)noexcept;template<class Facet> locale combine(const locale& other)const; // locale 操作: basic_string<char> name()const;bool operator==(const locale& other)const;bool operator!=(const locale& other)const;template<class CharT, class Traits, class Allocator>bool operator()(const basic_string<CharT,Traits,Allocator>& s1, const basic_string<CharT,Traits,Allocator>& s2)const; // 全局 locale 对象:static locale global(const locale&);staticconst locale& classic();};
[编辑]类 std::ctype_base
class ctype_base {public:typedef/*bitmask-type*/ mask; // 数值仅为阐释。staticconst mask space =1<<0;staticconst mask print =1<<1;staticconst mask cntrl =1<<2;staticconst mask upper =1<<3;staticconst mask lower =1<<4;staticconst mask alpha =1<<5;staticconst mask digit =1<<6;staticconst mask punct =1<<7;staticconst mask xdigit=1<<8;staticconst mask blank =1<<9;staticconst mask alnum = alpha | digit;staticconst mask graph = alnum | punct;};
[编辑]类 std::ctype
template<class CharT>class ctype :public locale::facet, public ctype_base {public:typedef CharT char_type; explicit ctype(size_t refs =0); bool is(mask m, CharT c)const;const CharT* is(const CharT* low, const CharT* high, mask* vec)const;const CharT* scan_is(mask m, const CharT* low, const CharT* high)const;const CharT* scan_not(mask m, const CharT* low, const CharT* high)const; CharT toupper(CharT c)const;const CharT* toupper(CharT* low, const CharT* high)const; CharT tolower(CharT c)const;const CharT* tolower(CharT* low, const CharT* high)const; CharT widen(char c)const;constchar* widen(constchar* low, constchar* high, CharT* to)const;char narrow(CharT c, char dfault)const;const CharT* narrow(const CharT* low, const CharT*, char dfault, char* to)const; static locale::id id; protected: ~ctype();virtualbool do_is(mask m, CharT c)const;virtualconst CharT* do_is(const CharT* low, const CharT* high, mask* vec)const;virtualconst CharT* do_scan_is(mask m, const CharT* low, const CharT* high)const;virtualconst CharT* do_scan_not(mask m, const CharT* low, const CharT* high)const; virtual CharT do_toupper(CharT)const;virtualconst CharT* do_toupper(CharT* low, const CharT* high)const;virtual CharT do_tolower(CharT)const;virtualconst CharT* do_tolower(CharT* low, const CharT* high)const;virtual CharT do_widen(char)const;virtualconstchar* do_widen(constchar* low, constchar* high, CharT* dest)const;virtualchar do_narrow(CharT, char dfault)const;virtualconst CharT* do_narrow(const CharT* low, const CharT* high, char dfault, char* dest)const;};
[编辑]类 std::ctype_byname
template<class CharT>class ctype_byname :public ctype<CharT>{public:typedeftypename ctype<CharT>::mask mask;explicit ctype_byname(constchar*, size_t refs =0);explicit ctype_byname(const string&, size_t refs =0);protected: ~ctype_byname();};
[编辑]类 std::ctype<char>
template<>class ctype<char>:public locale::facet, public ctype_base {public:typedefchar char_type;explicit ctype(const mask* tab =0, bool del =false, size_t refs =0);bool is(mask m, char c)const;constchar* is(constchar* low, constchar* high, mask* vec)const;constchar* scan_is (mask m, constchar* low, constchar* high)const;constchar* scan_not(mask m, constchar* low, constchar* high)const;char toupper(char c)const;constchar* toupper(char* low, constchar* high)const;char tolower(char c)const;constchar* tolower(char* low, constchar* high)const;char widen(char c)const;constchar* widen(constchar* low, constchar* high, char* to)const;char narrow(char c, char dfault)const;constchar* narrow(constchar* low, constchar* high, char dfault, char* to)const; static locale::id id; staticconst size_t table_size =/* 由实现定义 */;const mask* table()constnoexcept;staticconst mask* classic_table()noexcept; protected: ~ctype();virtualchar do_toupper(char c)const;virtualconstchar* do_toupper(char* low, constchar* high)const;virtualchar do_tolower(char c)const;virtualconstchar* do_tolower(char* low, constchar* high)const;virtualchar do_widen(char c)const;virtualconstchar* do_widen(constchar* low, constchar* high, char* to)const;virtualchar do_narrow(char c, char dfault)const;virtualconstchar* do_narrow(constchar* low, constchar* high, char dfault, char* to)const;};
[编辑]类 std::codecvt_base
class codecvt_base {public:enum result { ok, partial, error, noconv };};
[编辑]类 std::codecvt
template<class internT, class externT, class stateT>class codecvt :public locale::facet, public codecvt_base {public:typedef internT intern_type;typedef externT extern_type;typedef stateT state_type;explicit codecvt(size_t refs =0); result out(stateT& state, const internT* from, const internT* from_end, const internT*& from_next, externT* to, externT* to_end, externT*& to_next)const; result unshift(stateT& state, externT* to, externT* to_end, externT*& to_next)const; result in(stateT& state, const externT* from, const externT* from_end, const externT*& from_next, internT* to, internT* to_end, internT*& to_next)const;int encoding()constnoexcept;bool always_noconv()constnoexcept;int length(stateT&, const externT* from, const externT* end, size_t max)const;int max_length()constnoexcept;static locale::id id;protected: ~codecvt();virtual result do_out(stateT& state, const internT* from, const internT* from_end, const internT*& from_next, externT* to, externT* to_end, externT*& to_next)const;virtual result do_in(stateT& state, const externT* from, const externT* from_end, const externT*& from_next, internT* to, internT* to_end, internT*& to_next)const;virtual result do_unshift(stateT& state, externT* to, externT* to_end, externT*& to_next)const;virtualint do_encoding()constnoexcept;virtualbool do_always_noconv()constnoexcept;virtualint do_length(stateT&, const externT* from, const externT* end, size_t max)const;virtualint do_max_length()constnoexcept;};
[编辑]类 std::codecvt_byname
template<class internT, class externT, class stateT>class codecvt_byname :public codecvt<internT, externT, stateT>{public:explicit codecvt_byname(constchar*, size_t refs =0);explicit codecvt_byname(const string&, size_t refs =0);protected: ~codecvt_byname();};
[编辑]类 std::num_get
template<class CharT, class InputIter = istreambuf_iterator<CharT>>class num_get :public locale::facet{public:typedef CharT char_type;typedef InputIter iter_type;explicit num_get(size_t refs =0); iter_type get(iter_type in, iter_type end, ios_base&, ios_base::iostate& err, bool& v)const; iter_type get(iter_type in, iter_type end, ios_base&, ios_base::iostate& err, long& v)const; iter_type get(iter_type in, iter_type end, ios_base&, ios_base::iostate& err, longlong& v)const; iter_type get(iter_type in, iter_type end, ios_base&, ios_base::iostate& err, unsignedshort& v)const; iter_type get(iter_type in, iter_type end, ios_base&, ios_base::iostate& err, unsignedint& v)const; iter_type get(iter_type in, iter_type end, ios_base&, ios_base::iostate& err, unsignedlong& v)const; iter_type get(iter_type in, iter_type end, ios_base&, ios_base::iostate& err, unsignedlonglong& v)const; iter_type get(iter_type in, iter_type end, ios_base&, ios_base::iostate& err, float& v)const; iter_type get(iter_type in, iter_type end, ios_base&, ios_base::iostate& err, double& v)const; iter_type get(iter_type in, iter_type end, ios_base&, ios_base::iostate& err, longdouble& v)const; iter_type get(iter_type in, iter_type end, ios_base&, ios_base::iostate& err, void*& v)const; static locale::id id; protected: ~num_get(); virtual iter_type do_get(iter_type, iter_type, ios_base&, ios_base::iostate& err, bool& v)const;virtual iter_type do_get(iter_type, iter_type, ios_base&, ios_base::iostate& err, long& v)const;virtual iter_type do_get(iter_type, iter_type, ios_base&, ios_base::iostate& err, longlong& v)const;virtual iter_type do_get(iter_type, iter_type, ios_base&, ios_base::iostate& err, unsignedshort& v)const;virtual iter_type do_get(iter_type, iter_type, ios_base&, ios_base::iostate& err, unsignedint& v)const;virtual iter_type do_get(iter_type, iter_type, ios_base&, ios_base::iostate& err, unsignedlong& v)const;virtual iter_type do_get(iter_type, iter_type, ios_base&, ios_base::iostate& err, unsignedlonglong& v)const;virtual iter_type do_get(iter_type, iter_type, ios_base&, ios_base::iostate& err, float& v)const;virtual iter_type do_get(iter_type, iter_type, ios_base&, ios_base::iostate& err, double& v)const;virtual iter_type do_get(iter_type, iter_type, ios_base&, ios_base::iostate& err, longdouble& v)const;virtual iter_type do_get(iter_type, iter_type, ios_base&, ios_base::iostate& err, void*& v)const;};
[编辑]类 std::num_put
template<class CharT, class OutputIter = ostreambuf_iterator<CharT>>class num_put :public locale::facet{public:typedef CharT char_type;typedef OutputIter iter_type; explicit num_put(size_t refs =0); iter_type put(iter_type s, ios_base& f, char_type fill, bool v)const; iter_type put(iter_type s, ios_base& f, char_type fill, long v)const; iter_type put(iter_type s, ios_base& f, char_type fill, longlong v)const; iter_type put(iter_type s, ios_base& f, char_type fill, unsignedlong v)const; iter_type put(iter_type s, ios_base& f, char_type fill, unsignedlonglong v)const; iter_type put(iter_type s, ios_base& f, char_type fill, double v)const; iter_type put(iter_type s, ios_base& f, char_type fill, longdouble v)const; iter_type put(iter_type s, ios_base& f, char_type fill, constvoid* v)const; static locale::id id; protected: ~num_put(); virtual iter_type do_put(iter_type, ios_base&, char_type fill, bool v)const;virtual iter_type do_put(iter_type, ios_base&, char_type fill, long v)const;virtual iter_type do_put(iter_type, ios_base&, char_type fill, longlong v)const;virtual iter_type do_put(iter_type, ios_base&, char_type fill, unsignedlong)const;virtual iter_type do_put(iter_type, ios_base&, char_type fill, unsignedlonglong)const;virtual iter_type do_put(iter_type, ios_base&, char_type fill, double v)const;virtual iter_type do_put(iter_type, ios_base&, char_type fill, longdouble v)const;virtual iter_type do_put(iter_type, ios_base&, char_type fill, constvoid* v)const;};
[编辑]类 std::numpunct
template<class CharT>class numpunct :public locale::facet{public:typedef CharT char_type;typedef basic_string<CharT> string_type; explicit numpunct(size_t refs =0); char_type decimal_point()const; char_type thousands_sep()const; string grouping()const; string_type truename()const; string_type falsename()const; static locale::id id; protected: ~numpunct();// 虚函数 virtual char_type do_decimal_point()const;virtual char_type do_thousands_sep()const;virtual string do_grouping()const;virtual string_type do_truename()const;// 用于 boolvirtual string_type do_falsename()const;// 用于 bool};
[编辑]类 std::numpunct_byname
template<class CharT>class numpunct_byname :public numpunct<CharT>{public:typedef CharT char_type;typedef basic_string<CharT> string_type; explicit numpunct_byname(constchar*, size_t refs =0);explicit numpunct_byname(const string&, size_t refs =0); protected: ~numpunct_byname();};
[编辑]类 std::collate
template<class CharT>class collate :public locale::facet{public:typedef CharT char_type;typedef basic_string<CharT> string_type; explicit collate(size_t refs =0); int compare(const CharT* low1, const CharT* high1, const CharT* low2, const CharT* high2)const; string_type transform(const CharT* low, const CharT* high)const;long hash(const CharT* low, const CharT* high)const; static locale::id id; protected: ~collate(); virtualint do_compare(const CharT* low1, const CharT* high1, const CharT* low2, const CharT* high2)const;virtual string_type do_transform(const CharT* low, const CharT* high)const;virtuallong do_hash (const CharT* low, const CharT* high)const;};
[编辑]类 std::collate_byname
template<class CharT>class collate_byname :public collate<CharT>{public:typedef basic_string<CharT> string_type; explicit collate_byname(constchar*, size_t refs =0);explicit collate_byname(const string&, size_t refs =0); protected: ~collate_byname();};
[编辑]类 std::time_base
class time_base {public:enum dateorder { no_order, dmy, mdy, ymd, ydm };};
[编辑]类 std::time_get
template<class CharT, class InputIter = istreambuf_iterator<CharT>>class time_get :public locale::facet, public time_base {public:typedef CharT char_type;typedef InputIter iter_type; explicit time_get(size_t refs =0); dateorder date_order()const; iter_type get_time(iter_type s, iter_type end, ios_base& f, ios_base::iostate& err, tm* t)const; iter_type get_date(iter_type s, iter_type end, ios_base& f, ios_base::iostate& err, tm* t)const; iter_type get_weekday(iter_type s, iter_type end, ios_base& f, ios_base::iostate& err, tm* t)const; iter_type get_monthname(iter_type s, iter_type end, ios_base& f, ios_base::iostate& err, tm* t)const; iter_type get_year(iter_type s, iter_type end, ios_base& f, ios_base::iostate& err, tm* t)const; iter_type get(iter_type s, iter_type end, ios_base& f, ios_base::iostate& err, tm* t, char format, char modifier =0)const; iter_type get(iter_type s, iter_type end, ios_base& f, ios_base::iostate& err, tm* t, const char_type* fmt, const char_type* fmtend)const; static locale::id id; protected: ~time_get(); virtual dateorder do_date_order()const;virtual iter_type do_get_time(iter_type s, iter_type end, ios_base&, ios_base::iostate& err, tm* t)const;virtual iter_type do_get_date(iter_type s, iter_type end, ios_base&, ios_base::iostate& err, tm* t)const;virtual iter_type do_get_weekday(iter_type s, iter_type end, ios_base&, ios_base::iostate& err, tm* t)const;virtual iter_type do_get_monthname(iter_type s, iter_type end, ios_base&, ios_base::iostate& err, tm* t)const;virtual iter_type do_get_year(iter_type s, iter_type end, ios_base&, ios_base::iostate& err, tm* t)const;virtual iter_type do_get(iter_type s, iter_type end, ios_base& f, ios_base::iostate& err, tm* t, char format, char modifier)const;};
[编辑]类 std::time_get_byname
template<class CharT, class InputIter = istreambuf_iterator<CharT>>class time_get_byname :public time_get<CharT, InputIter>{public:typedef time_base::dateorder dateorder;typedef InputIter iter_type; explicit time_get_byname(constchar*, size_t refs =0);explicit time_get_byname(const string&, size_t refs =0); protected: ~time_get_byname();};
[编辑]类 std::time_put
template<class CharT, class OutputIter = ostreambuf_iterator<CharT>>class time_put :public locale::facet{public:typedef CharT char_type;typedef OutputIter iter_type; explicit time_put(size_t refs =0); // 下列函数以其他成员函数实现。 iter_type put(iter_type s, ios_base& f, char_type fill, const tm* tmb, const CharT* pattern, const CharT* pat_end)const; iter_type put(iter_type s, ios_base& f, char_type fill, const tm* tmb, char format, char modifier =0)const; static locale::id id; protected: ~time_put(); virtual iter_type do_put(iter_type s, ios_base&, char_type, const tm* t, char format, char modifier)const;};
[编辑]类 std::time_put_byname
template<class CharT, class OutputIter = ostreambuf_iterator<CharT>>class time_put_byname :public time_put<CharT, OutputIter>{public:typedef CharT char_type;typedef OutputIter iter_type; explicit time_put_byname(constchar*, size_t refs =0);explicit time_put_byname(const string&, size_t refs =0); protected: ~time_put_byname();};
[编辑]类 std::money_get
template<class CharT, class InputIter = istreambuf_iterator<CharT>>class money_get :public locale::facet{public:typedef CharT char_type;typedef InputIter iter_type;typedef basic_string<CharT> string_type; explicit money_get(size_t refs =0); iter_type get(iter_type s, iter_type end, bool intl, ios_base& f, ios_base::iostate& err, longdouble& units)const; iter_type get(iter_type s, iter_type end, bool intl, ios_base& f, ios_base::iostate& err, string_type& digits)const; static locale::id id; protected: ~money_get(); virtual iter_type do_get(iter_type, iter_type, bool, ios_base&, ios_base::iostate& err, longdouble& units)const;virtual iter_type do_get(iter_type, iter_type, bool, ios_base&, ios_base::iostate& err, string_type& digits)const;};
[编辑]类 std::money_put
template<class CharT, class OutputIter = ostreambuf_iterator<CharT>>class money_put :public locale::facet{public:typedef CharT char_type;typedef OutputIter iter_type;typedef basic_string<CharT> string_type; explicit money_put(size_t refs =0); iter_type put(iter_type s, bool intl, ios_base& f, char_type fill, longdouble units)const; iter_type put(iter_type s, bool intl, ios_base& f, char_type fill, const string_type& digits)const; static locale::id id; protected: ~money_put(); virtual iter_type do_put(iter_type, bool, ios_base&, char_type fill, longdouble units)const;virtual iter_type do_put(iter_type, bool, ios_base&, char_type fill, const string_type& digits)const;};
[编辑]类 std::money_base
class money_base {public:enum part { none, space, symbol, sign, value };struct pattern {char field[4];};};
[编辑]类 std::moneypunct
template<class CharT, bool International =false>class moneypunct :public locale::facet, public money_base {public:typedef CharT char_type;typedef basic_string<CharT> string_type; explicit moneypunct(size_t refs =0); CharT decimal_point()const; CharT thousands_sep()const; string grouping()const; string_type curr_symbol()const; string_type positive_sign()const; string_type negative_sign()const;int frac_digits()const; pattern pos_format()const; pattern neg_format()const; static locale::id id;staticconstbool intl = International; protected: ~moneypunct(); virtual CharT do_decimal_point()const;virtual CharT do_thousands_sep()const;virtual string do_grouping()const;virtual string_type do_curr_symbol()const;virtual string_type do_positive_sign()const;virtual string_type do_negative_sign()const;virtualint do_frac_digits()const;virtual pattern do_pos_format()const;virtual pattern do_neg_format()const;};
[编辑]类 std::moneypunct_byname
template<class CharT, bool Intl =false>class moneypunct_byname :public moneypunct<CharT, Intl>{public:typedef money_base::pattern pattern;typedef basic_string<CharT> string_type; explicit moneypunct_byname(constchar*, size_t refs =0);explicit moneypunct_byname(const string&, size_t refs =0); protected: ~moneypunct_byname();};
[编辑]类 std::messages_base
class messages_base {public:typedef/* 未指明的有符号整数类型 */ catalog;};
[编辑]类 std::messages
template<class CharT>class messages :public locale::facet, public messages_base {public:typedef CharT char_type;typedef basic_string<CharT> string_type; explicit messages(size_t refs =0); catalog open(const basic_string<char>& fn, const locale&)const; string_type get(catalog c, int set, int msgid, const string_type& dfault)const;void close(catalog c)const; static locale::id id; protected: ~messages(); virtual catalog do_open(const basic_string<char>&, const locale&)const;virtual string_type do_get(catalog, int set, int msgid, const string_type& dfault)const;virtualvoid do_close(catalog)const;};
[编辑]类 std::messages_byname
template<class CharT>class messages_byname :public messages<CharT>{public:typedef messages_base::catalog catalog;typedef basic_string<CharT> string_type; explicit messages_byname(constchar*, size_t refs =0);explicit messages_byname(const string&, size_t refs =0); protected: ~messages_byname();};
[编辑]类 std::wstring_convert
template<class Codecvt, class Elem =wchar_t, class Wide_alloc =std::allocator<Elem>, class Byte_alloc =std::allocator<char>>class wstring_convert {public:typedefstd::basic_string<char, char_traits<char>, Byte_alloc> byte_string;typedefstd::basic_string<Elem, char_traits<Elem>, Wide_alloc> wide_string;typedeftypename Codecvt::state_type state_type;typedeftypename wide_string::traits_type::int_type int_type; explicit wstring_convert(Codecvt* pcvt = new Codecvt); wstring_convert(Codecvt* pcvt, state_type state);explicit wstring_convert(const byte_string& byte_err, const wide_string& wide_err = wide_string()); ~wstring_convert(); wstring_convert(const wstring_convert&)= delete; wstring_convert& operator=(const wstring_convert&)= delete; wide_string from_bytes(char byte); wide_string from_bytes(constchar* ptr); wide_string from_bytes(const byte_string& str); wide_string from_bytes(constchar* first, constchar* last); byte_string to_bytes(Elem wchar); byte_string to_bytes(const Elem* wptr); byte_string to_bytes(const wide_string& wstr); byte_string to_bytes(const Elem* first, const Elem* last); size_t converted()constnoexcept; state_type state()const; private: byte_string byte_err_string;// 仅用于阐释 wide_string wide_err_string;// 仅用于阐释 Codecvt* cvtptr;// 仅用于阐释 state_type cvtstate;// 仅用于阐释 size_t cvtcount;// 仅用于阐释};
[编辑]类 std::wbuffer_convert
template<class Codecvt, class Elem =wchar_t, class Tr =std::char_traits<Elem>>class wbuffer_convert :publicstd::basic_streambuf<Elem, Tr>{public:typedeftypename Codecvt::state_type state_type; explicit wbuffer_convert(std::streambuf* bytebuf =0, Codecvt* pcvt = new Codecvt, state_type state = state_type()); ~wbuffer_convert(); wbuffer_convert(const wbuffer_convert&)= delete; wbuffer_convert& operator=(const wbuffer_convert&)= delete; std::streambuf* rdbuf()const;std::streambuf* rdbuf(std::streambuf* bytebuf); state_type state()const;private:std::streambuf* bufptr;// 仅用于阐释 Codecvt* cvtptr;// 仅用于阐释 state_type cvtstate;// 仅用于阐释};
[编辑]缺陷报告
下列更改行为的缺陷报告追溯地应用于以前出版的 C++ 标准。
缺陷报告 | 应用于 | 出版时的行为 | 正确行为 |
---|---|---|---|
LWG 71 | C++98 | time_get::do_get_monthname 在概要中缺失了 end 形参 | 已补充 |
LWG 75 | C++98 | 在概要中 codecvt 和 codecvt_byname 的成员 length 和do_length 的形参 state 的类型是 const stateT& | 改成 stateT& |
LWG 124 | C++98 | 在概要中 codecvt_byname 的成员 do_scan_is 和 do_scan_out 的返回类型是 constchar* | 改成 const charT* |
LWG 228 | C++98 | 概要列出了各个 XXX_byname 平面的所有成员虚函数 | 只列出析构函数 (移除其他所有虚函数) |
LWG 268 | C++98 | 概要中缺失了后随 std::locale 的默认构造函数和复制构造函数的声明的分号 | 已补充 |
LWG 1298 | C++98 | 概要中有显式特化 ctype_byname<char> | 已移除 |