std::has_facet
来自 cppreference.com
在头文件 <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
不是 构面 或它是 volatile 限定的构面,则程序格式错误。
内容 |
[编辑] 参数
loc | - | 要查询的语言环境对象 |
[编辑] 返回值
如果在语言环境 loc 中安装了构面 Facet
,则返回 true,否则返回 false。
[编辑] 备注
如果 Facet
是给定 此处 的标准构面之一,则对于所有语言环境 loc,std::has_facet
必须返回 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 限定的 |
[编辑] 另请参阅
封装文化差异的多态构面集 (类) | |
从语言环境获取构面 (函数模板) |