名前空間
変種
操作

std::has_facet

From cppreference.com
< cpp‎ | locale
 
 
 
 
ヘッダー <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 修飾は不可能です。

[編集] 関連項目

文化的な違いをカプセル化するポリモーフィックなファセットのセット
(クラス) [編集]
ロケールからファセットを取得する
(関数テンプレート) [編集]
English 日本語 中文(简体) 中文(繁體)