c++11 标准模板(STL)本地化库 - 平面类别(std::numpunct_byname) 表示系统提供的具名本地环境的 std::numpunct

本文主要是介绍c++11 标准模板(STL)本地化库 - 平面类别(std::numpunct_byname) 表示系统提供的具名本地环境的 std::numpunct,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

本地化库

本地环境设施包含字符分类和字符串校对、数值、货币及日期/时间格式化和分析,以及消息取得的国际化支持。本地环境设置控制流 I/O 、正则表达式库和 C++ 标准库的其他组件的行为。

平面类别

表示系统提供的具名本地环境的 std::numpunct

std::numpunct_byname

template< class CharT >
class numpunct_byname : public std::numpunct<CharT>;

std::numpunct_byname 是 std::numpunct 平面,它封装在其构造时指定的 locale 的数值标点偏好。

标准库提供二个特化

定义于头文件 <locale>

std::numpunct_byname<char>窄字符 I/O 的本地环境限定 std::numpunct 平面
std::numpunct_byname<wchar_t>宽字符 I/O 的本地环境限定 std::numpunct 平面

成员类型

成员类型定义
char_typeCharT
string_typestd::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:
~numpunct_byname();

销毁平面。

继承自 std::numpunct

成员类型

成员类型定义
char_typecharT
string_typestd::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_truenamedo_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

这篇关于c++11 标准模板(STL)本地化库 - 平面类别(std::numpunct_byname) 表示系统提供的具名本地环境的 std::numpunct的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1001186

相关文章

Android开发环境配置避坑指南

《Android开发环境配置避坑指南》本文主要介绍了Android开发环境配置过程中遇到的问题及解决方案,包括VPN注意事项、工具版本统一、Gerrit邮箱配置、Git拉取和提交代码、MergevsR... 目录网络环境:VPN 注意事项工具版本统一:android Studio & JDKGerrit的邮

Windows系统宽带限制如何解除?

《Windows系统宽带限制如何解除?》有不少用户反映电脑网速慢得情况,可能是宽带速度被限制的原因,只需解除限制即可,具体该如何操作呢?本文就跟大家一起来看看Windows系统解除网络限制的操作方法吧... 有不少用户反映电脑网速慢得情况,可能是宽带速度被限制的原因,只需解除限制即可,具体该如何操作呢?本文

CentOS和Ubuntu系统使用shell脚本创建用户和设置密码

《CentOS和Ubuntu系统使用shell脚本创建用户和设置密码》在Linux系统中,你可以使用useradd命令来创建新用户,使用echo和chpasswd命令来设置密码,本文写了一个shell... 在linux系统中,你可以使用useradd命令来创建新用户,使用echo和chpasswd命令来设

电脑找不到mfc90u.dll文件怎么办? 系统报错mfc90u.dll丢失修复的5种方案

《电脑找不到mfc90u.dll文件怎么办?系统报错mfc90u.dll丢失修复的5种方案》在我们日常使用电脑的过程中,可能会遇到一些软件或系统错误,其中之一就是mfc90u.dll丢失,那么,mf... 在大部分情况下出现我们运行或安装软件,游戏出现提示丢失某些DLL文件或OCX文件的原因可能是原始安装包

电脑显示mfc100u.dll丢失怎么办?系统报错mfc90u.dll丢失5种修复方案

《电脑显示mfc100u.dll丢失怎么办?系统报错mfc90u.dll丢失5种修复方案》最近有不少兄弟反映,电脑突然弹出“mfc100u.dll已加载,但找不到入口点”的错误提示,导致一些程序无法正... 在计算机使用过程中,我们经常会遇到一些错误提示,其中最常见的就是“找不到指定的模块”或“缺少某个DL

C#如何调用C++库

《C#如何调用C++库》:本文主要介绍C#如何调用C++库方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录方法一:使用P/Invoke1. 导出C++函数2. 定义P/Invoke签名3. 调用C++函数方法二:使用C++/CLI作为桥接1. 创建C++/CL

利用Python打造一个Excel记账模板

《利用Python打造一个Excel记账模板》这篇文章主要为大家详细介绍了如何使用Python打造一个超实用的Excel记账模板,可以帮助大家高效管理财务,迈向财富自由之路,感兴趣的小伙伴快跟随小编一... 目录设置预算百分比超支标红预警记账模板功能介绍基础记账预算管理可视化分析摸鱼时间理财法碎片时间利用财

如何在 Spring Boot 中实现 FreeMarker 模板

《如何在SpringBoot中实现FreeMarker模板》FreeMarker是一种功能强大、轻量级的模板引擎,用于在Java应用中生成动态文本输出(如HTML、XML、邮件内容等),本文... 目录什么是 FreeMarker 模板?在 Spring Boot 中实现 FreeMarker 模板1. 环

IntelliJ IDEA 中配置 Spring MVC 环境的详细步骤及问题解决

《IntelliJIDEA中配置SpringMVC环境的详细步骤及问题解决》:本文主要介绍IntelliJIDEA中配置SpringMVC环境的详细步骤及问题解决,本文分步骤结合实例给大... 目录步骤 1:创建 Maven Web 项目步骤 2:添加 Spring MVC 依赖1、保存后执行2、将新的依赖

解决Maven项目idea找不到本地仓库jar包问题以及使用mvn install:install-file

《解决Maven项目idea找不到本地仓库jar包问题以及使用mvninstall:install-file》:本文主要介绍解决Maven项目idea找不到本地仓库jar包问题以及使用mvnin... 目录Maven项目idea找不到本地仓库jar包以及使用mvn install:install-file基