std::use_facet

来自cppreference.com
< cpp‎ | locale
在标头 <locale> 定义
template< class Facet >
const Facet& use_facet( const std::locale& loc );

获得到 loc 实装的平面的引用。

如果 Facet 不是定义中包含公开静态成员 id平面或者是有 volatile 限定的平面,那么程序非良构。

参数

loc - 要查询的本地环境对象

返回值

返回到平面的引用。此函数返回的引用在有引用该平面的 std::locale 对象存在的期间保持合法。

异常

std::has_facet<Facet>(loc) == false 的情况下抛出 std::bad_cast

示例

显示用户偏好的本地环境所用的 3 位字母金额名:

#include <iostream>
#include <locale>
 
int main()
{
    std::locale loc = std::locale(""); // 用户偏好的本地环境
    std::cout << "你的金额字符串是 "
              << std::use_facet<std::moneypunct<char, true>>(loc).curr_symbol() << '\n';
}

可能的输出:

你的金额字符串是 USD

缺陷报告

下列更改行为的缺陷报告追溯地应用于以前出版的 C++ 标准。

缺陷报告 应用于 出版时的行为 正确行为
LWG 31 C++98 返回的引用在该本地环境值存在的期间保持合法 返回的引用在有引用该平面的本地环境对象存在的期间保持合法
LWG 38 C++98 Facet 不需要有直接成员 id 需要
LWG 436 C++98 不明确 Facet 是否可以有 cv 限定 可以有 const 限定,但不能有 volatile 限定

参阅

用来封装文化差异的多态平面的集合
(类)
检查本地环境是否实现特定的平面
(函数模板)