Namespaces
Variants

std:: has_facet

From cppreference.net
定义于头文件 <locale>
template < class Facet >
bool has_facet ( const locale & loc ) throw ( ) ;
(C++11 前)
template < class Facet >
bool has_facet ( const locale & loc ) noexcept ;
(C++11 起)

检查区域设置 loc 是否实现了 Facet 刻面。

如果 Facet 不是一个 facet ,或者它是带有 volatile 限定符的 facet,则程序是非良构的。

目录

参数

loc - 要查询的区域设置对象

返回值

若刻面 Facet 已安装到区域设置 loc 中则返回 true ,否则返回 false

注释

std::has_facet 对于所有区域设置 loc 必须返回 true ,若 Facet 此处 列出的标准facet之一。

示例

#include <iostream>
#include <locale>
// 最小化自定义facet
struct myfacet : public std::locale::facet
{
    static std::locale::id id;
};
std::locale::id myfacet::id;
int main()
{
    // loc是添加了myfacet的"C"区域设置
    std::locale loc(std::locale::classic(), new myfacet);
    std::cout << std::boolalpha
              << "loc能否分类字符? "
              << std::has_facet<std::ctype<char>>(loc) << '\n'
              << "loc能否分类char32_t? "
              << std::has_facet<std::ctype<char32_t>>(loc) << '\n'
              << "loc是否实现了myfacet? "
              << std::has_facet<myfacet>(loc) << '\n';
}

输出:

Can loc classify chars? true
Can loc classify char32_t? false
Does loc implement myfacet? true

缺陷报告

下列行为变更缺陷报告被追溯应用于先前发布的C++标准。

缺陷报告 应用于 发布时行为 正确行为
LWG 436 C++98 未明确说明 Facet 是否可带有cv限定符 可带有const限定符,但不能带有volatile限定符

参见

封装文化差异的多态facet集合
(类)
从locale获取facet
(函数模板)