本地化库
本地环境设施包含字符分类和字符串校对、数值、货币及日期/时间格式化和分析,以及消息取得的国际化支持。本地环境设置控制流 I/O 、正则表达式库和 C++ 标准库的其他组件的行为。
平面类别
表示系统提供的具名本地环境的 std::numpunct
std::numpunct_byname
template< class CharT > |
std::numpunct_byname 是 std::numpunct 平面,它封装在其构造时指定的 locale 的数值标点偏好。
标准库提供二个特化
定义于头文件 | |
std::numpunct_byname<char> | 窄字符 I/O 的本地环境限定 std::numpunct 平面 |
std::numpunct_byname<wchar_t> | 宽字符 I/O 的本地环境限定 std::numpunct 平面 |
成员类型
成员类型 | 定义 |
char_type | CharT |
string_type | std::basic_string<CharT> |
成员函数
(构造函数) | 构造新的 numpunct_byname 平面(公开成员函数) |
(析构函数) | 析构 numpunct_byname 平面(受保护成员函数) |
std::numpunct_byname::numpunct_byname
explicit numpunct_byname( const char* name, std::size_t refs = 0 ); | ||
explicit numpunct_byname( const std::string& name, std::size_t refs = 0 ); | (C++11 起) |
为名为 name
的本地环境构造新的 std::numpunct_byname
平面。
refs
用于资源管理:在销毁最后一个保有平面的 std::locale 对象时,若 refs == 0 ,则实现销毁平面对象。否则,不销毁对象。
参数
name | - | 本地环境的名称 |
refs | - | 链接到该平面的引用数 |
std::numpunct_byname::~numpunct_byname
protected: |
销毁平面。
继承自 std::numpunct
成员类型
成员类型 | 定义 |
char_type | charT |
string_type | std::basic_string<charT> |
成员函数
decimal_point | 调用 do_decimal_point ( std::numpunct<CharT> 的公开成员函数) |
thousands_sep | 调用 do_thousands_sep ( std::numpunct<CharT> 的公开成员函数) |
grouping | 调用 do_grouping ( std::numpunct<CharT> 的公开成员函数) |
truenamefalsename | 调用 do_truename 或 do_falsename ( std::numpunct<CharT> 的公开成员函数) |
受保护成员函数
do_decimal_point [虚] | 提供用作小数点的字符 ( std::numpunct<CharT> 的虚受保护成员函数) |
do_thousands_sep [虚] | 提供用作千分隔符的字符 ( std::numpunct<CharT> 的虚受保护成员函数) |
do_grouping [虚] | 提供一对千分隔符之间的位数 ( std::numpunct<CharT> 的虚受保护成员函数) |
do_truenamedo_falsename [虚] | 提供用作布尔 true 和 false 名称的字符串 ( std::numpunct<CharT> 的虚受保护成员函数) |
成员对象
static std::locale::id id | locale 的 id (公开成员对象) |
调用示例 windows
#include <iostream>
#include <sstream>
#include <locale>
#include <iomanip>
#include <vector>
#include <algorithm>
#include <iterator>
#include <exception>
#include <Windows.h>std::vector<std::wstring> locals;BOOL CALLBACK MyFuncLocaleEx(LPWSTR pStr, DWORD dwFlags, LPARAM lparam)
{locals.push_back(pStr);return TRUE;
}std::string stows(const std::wstring& ws)
{std::string curLocale = setlocale(LC_ALL, NULL); // curLocale = "C";setlocale(LC_ALL, "chs");const wchar_t* _Source = ws.c_str();size_t _Dsize = 2 * ws.size() + 1;char *_Dest = new char[_Dsize];memset(_Dest, 0, _Dsize);wcstombs(_Dest, _Source, _Dsize);std::string result = _Dest;delete[]_Dest;setlocale(LC_ALL, curLocale.c_str());return result;
}struct numpunct_byname_my : std::numpunct_byname<char>
{explicit numpunct_byname_my(const char *_Locname, size_t _Refs = 0): numpunct_byname(_Locname, _Refs){// construct for named locale}explicit numpunct_byname_my(const std::string& _Str, size_t _Refs = 0): numpunct_byname(_Str.c_str(), _Refs){// construct for named locale}//提供用作千分隔符的字符char_type do_thousands_sep() const override{return ',';}//提供二个千分隔符间的位数string_type do_grouping() const override{return "\003";}//提供用作小数点的字符char_type do_decimal_point() const override{return '.';}
};int main()
{std::cout << "default locale: "<< std::boolalpha << true << ", " << false << std::endl;EnumSystemLocalesEx(MyFuncLocaleEx, LOCALE_ALTERNATE_SORTS, NULL, NULL);for (std::vector<std::wstring>::const_iterator str = locals.begin();str != locals.end(); ++str){if (stows(*str) == "x-IV_mathan"){continue;}std::locale locale(stows(*str));std::cout.imbue(locale);std::cout << locale.name() << " ";std::cout << "locale with modified numpunct: " << std::endl<< std::boolalpha<< "do_truename: " << true << std::endl<< "do_falsename: " << false << std::endl;}return 0;
}
输出
default locale: true, false
de-DE_phoneb locale with modified numpunct:
do_truename: true
do_falsename: false
es-ES_tradnl locale with modified numpunct:
do_truename: true
do_falsename: false
hu-HU_technl locale with modified numpunct:
do_truename: true
do_falsename: false
ja-JP_radstr locale with modified numpunct:
do_truename: true
do_falsename: false
ka-GE_modern locale with modified numpunct:
do_truename: true
do_falsename: false
zh-CN_phoneb locale with modified numpunct:
do_truename: true
do_falsename: false
zh-CN_stroke locale with modified numpunct:
do_truename: true
do_falsename: false
zh-HK_radstr locale with modified numpunct:
do_truename: true
do_falsename: false
zh-MO_radstr locale with modified numpunct:
do_truename: true
do_falsename: false
zh-MO_stroke locale with modified numpunct:
do_truename: true
do_falsename: false
zh-SG_phoneb locale with modified numpunct:
do_truename: true
do_falsename: false
zh-SG_stroke locale with modified numpunct:
do_truename: true
do_falsename: false
zh-TW_pronun locale with modified numpunct:
do_truename: true
do_falsename: false
zh-TW_radstr locale with modified numpunct:
do_truename: true
do_falsename: false