博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C++之国际化(3) --- facet
阅读量:4198 次
发布时间:2019-05-26

本文共 1279 字,大约阅读时间需要 4 分钟。

转载自:

 

国际化议题通常被划分为数个不同的模块,例如:数值、日期时间、货币等

国际话的每个模块由locale内不同的对象处理,
我们将这样一个处理某一模块的对象称为facet
locale则扮演了facet的容器。

要存取locale的某个模块,可以相应的facet型别作为索引。

将facet作为template参数,传递给use_facet()函数,便可以取得特定的facet

std::use_facet<std::numpunct<char> >(loc);

下面大致描述了C++标准库中预先定义的一些facet。
其中每个facet都和一个类别关联,
这些类别在locale某些构造函数中用来组合出其他的locale,即产生新的locale
类别             Facet                           用处
numeric     num_get<>()             数值输入
                   num_put<>()             数值输出
                   numpunct<>()            数值I/O中用到的符号
time            time_get<>()            日期时间输入
                   time_put<>()            日期时间输出
monetary    money_get<>()       货币输入
                   money_put<>()       货币输出
                   moneypunct <>()    货币I/O中用到的符号
ctype          ctype<>()                字符信息(toupper() , isupper())
                   codecvt<>()             在不同字符编码之间进行转换
collate        collate<>()             字符串校勘(collation)
messages    messages<>           获取字符信息

我们也可以定义自己的facet,从而进一步创建特定的locale。

下面实现了一个简单的facet:
class ChineseBoolNames : public tsd::numpunct_byname<char>
{
public:
    ChineseBoolNames(const char* name):std::numpunct_byname<char>(name)
    {
    }
protected:
    virtual std::string do_truename() const
    {
        return "zhen";
    }
    virtual std::string do_falsename() const
    {
        return "jia";
    }
};
要使用这个facet,就需要用到locale的一个构造函数:
template<typename _Facet> locale(const locale& __other, _Facet* __f);
意思为产生一个新的locale,它和第一参数给定的locale对象基本相同,
唯一不同的是第二参数指定的那个facet
则我们可以如下使用我们定义的facet:
std::locale loc(std::locale(""),new ChineseBoolNames(""));
std::cout.imbue(loc);
cout<<std::boolalpha<<true<<endl;

 

你可能感兴趣的文章
Spring AOP 实例
查看>>
JAVA分页显示(程序分页和物理分页)
查看>>
Hibernate复合主键
查看>>
JQuery推荐插件(200+)
查看>>
自己实现事件监听
查看>>
高效实现数据仓库的七个步骤
查看>>
数据仓库开发过程中的七个禁忌
查看>>
顺利开发数据仓库的七种思路
查看>>
MySQL中文参考手册
查看>>
什么是ARP?如何防范ARP欺骗?
查看>>
Struts2获得Session和Request对象
查看>>
IE 模态对话框
查看>>
jQuery对象和DOM对象相互转化
查看>>
Js获取HTML DOM节点元素
查看>>
JSP基础--J2EE赢在起跑线
查看>>
SQL Server 2005常用函数汇总
查看>>
Ireport 用例教程
查看>>
Spring AOP execution 切入点表达式
查看>>
一句集大成的SQL
查看>>
Spring AOP 事务问题
查看>>