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
是在这里列出的标准平面之一时,std::has_facet
必须对所有本地环境 loc 返回 true。
示例
运行此代码
#include <iostream> #include <locale> // 最小自定义平面 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 是否可以分类 char?" << 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'; }
输出:
loc 是否可以分类 char?true loc 是否可以分类 char32_t?false loc 是否实现了 myfacet?true
缺陷报告
下列更改行为的缺陷报告追溯地应用于以前出版的 C++ 标准。
缺陷报告 | 应用于 | 出版时的行为 | 正确行为 |
---|---|---|---|
LWG 436 | C++98 | 不明确 Facet 是否可以有 cv 限定
|
可以有 const 限定,但不能有 volatile 限定 |
参阅
用来封装文化差异的多态平面的集合 (类) | |
从本地环境获得一个平面 (函数模板) |