std:: has_facet
|
定义于头文件
<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
(函数模板) |