std::has_facet
From 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 修飾されたファセットである場合、プログラムは ill-formed となります。
目次 |
[編集] パラメータ
| loc | - | 問い合わせ対象のロケールオブジェクト |
[編集] 戻り値
ファセット Facet がロケール loc にインストールされていた場合は true を、そうでない場合は false を返します。
[編集] 備考
std::has_facet は、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 修飾は不可能です。 |
[編集] 関連項目
| 文化的な違いをカプセル化するポリモーフィックなファセットのセット (クラス) | |
| ロケールからファセットを取得する (関数テンプレート) |