std::has_facet
来自 cppreference.cn
定义于头文件 <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 不是 facet 或它是 volatile 限定的 facet,则程序是非良构的。
目录 |
[编辑] 参数
loc | - | 要查询的区域设置对象 |
[编辑] 返回值
如果 facet Facet
已安装在区域设置 loc 中,则返回 true,否则返回 false。
[编辑] 注释
如果 Facet
是 此处给出的标准 facet 之一,则 std::has_facet
必须为所有区域设置 loc 返回 true。
[编辑] 示例
运行此代码
#include <iostream> #include <locale> // minimal custom facet struct myfacet : public std::locale::facet { static std::locale::id id; }; std::locale::id myfacet::id; int main() { // loc is a "C" locale with myfacet added std::locale loc(std::locale::classic(), new myfacet); std::cout << std::boolalpha << "Can loc classify chars? " << std::has_facet<std::ctype<char>>(loc) << '\n' << "Can loc classify char32_t? " << std::has_facet<std::ctype<char32_t>>(loc) << '\n' << "Does loc implement myfacet? " << std::has_facet<myfacet>(loc) << '\n'; }
输出
Can loc classify chars? true Can loc classify char32_t? false Does loc implement myfacet? true
[编辑] 缺陷报告
以下行为更改缺陷报告被追溯应用于先前发布的 C++ 标准。
DR | 应用于 | 已发布行为 | 正确行为 |
---|---|---|---|
LWG 436 | C++98 | 不清楚 Facet 是否可以是 cv 限定的 |
它可以是 const 限定的,但不能是 volatile 限定的 |
[编辑] 参见
封装文化差异的多态 facet 集合 (类) | |
从区域设置获取 facet (函数模板) |