std::locale
提供: cppreference.com
<tbody>
</tbody>
| ヘッダ <locale> で定義
|
||
class locale; |
||
std::locale クラスのオブジェクトは不変なファセットの不変なインデックス付き集合です。 C++ 入出力ライブラリのストリームオブジェクトはそれぞれ std::locale オブジェクトと紐付けられており、すべてのデータの解析や書式化のためにそのファセットを使用します。 さらに、ロケールオブジェクトはそれぞれ std::basic_regex オブジェクトと紐付けられています。 ロケールオブジェクトは標準のコンテナやアルゴリズムで文字列の照合を行うための述語としても使用でき、保持するファセットを取得したり変更したりするために直接アクセスすることもできます。
C++ のプログラム内で構築されたそれぞれのロケールは少なくとも以下の標準のファセットを保持しますが、プログラムは追加の特殊化や完全に新しいファセットを定義し、それを任意の既存のロケールオブジェクトに追加することができます。
| サポートされているファセット | |
|---|---|
std::collate<char>
|
std::collate<wchar_t>
|
std::ctype<char>
|
std::ctype<wchar_t>
|
std::codecvt<char,char,mbstate_t>std::codecvt<char16_t,char,mbstate_t>
|
std::codecvt<char32_t,char,mbstate_t>std::codecvt<wchar_t,char,mbstate_t>
|
std::moneypunct<char> std::moneypunct<char,true>
|
std::moneypunct<wchar_t>std::moneypunct<wchar_t,true>
|
std::money_get<char>
|
std::money_get<wchar_t>
|
std::money_put<char>
|
std::money_put<wchar_t>
|
std::numpunct<char>
|
std::numpunct<wchar_t>
|
std::num_get<char>
|
std::num_get<wchar_t>
|
std::num_put<char>
|
std::num_put<wchar_t>
|
std::time_get<char>
|
std::time_get<wchar_t>
|
std::time_put<char>
|
std::time_put<wchar_t>
|
std::messages<char>
|
std::messages<wchar_t>
|
内部的には、ロケールオブジェクトは、ファセットへの参照カウント付きポインタの (std::locale::id によってインデックス付けされた) 配列への参照カウント付きポインタであるかのように実装されます。 ロケールのコピーはポインタひとつをコピーしていくつかの参照カウントを増加させるだけです。 標準 C++ ライブラリのスレッド安全性保証 (異なるオブジェクトに対する操作は常にスレッドセーフである) を維持するために、ロケールの参照カウントと各ファセットの参照カウントはどちらも std::shared_ptr と同様にスレッドセーフな方法で更新されます。
メンバ型
| ファセットのインデックスの型。 各ファセットクラスはこの型のパブリック静的メンバを宣言または継承しなければなりません (クラス) | |
| すべてのファセットカテゴリのための基底クラス。 任意のカテゴリの各ファセットはこの型から派生します (クラス) | |
category |
int (typedef) |
メンバオブジェクト
none [静的] |
ファセットカテゴリがないことを表す category 型のゼロ値 (パブリック静的メンバ定数) |
collate [静的] |
照合ファセットカテゴリを表す category 型のビットマスク値 (パブリック静的メンバ定数) |
ctype [静的] |
文字種ファセットカテゴリを表す category 型のビットマスク値 (パブリック静的メンバ定数) |
monetary [静的] |
金額ファセットカテゴリを表す category 型のビットマスク値 (パブリック静的メンバ定数) |
numeric [静的] |
数値ファセットカテゴリを表す category 型のビットマスク値 (パブリック静的メンバ定数) |
time [静的] |
時間ファセットカテゴリを表す category 型のビットマスク値 (パブリック静的メンバ定数) |
messages [静的] |
メッセージファセットカテゴリを表す category 型のビットマスク値 (パブリック静的メンバ定数) |
all [静的] |
collate | ctype | monetary | numeric | time | messages (パブリック静的メンバ定数) |
メンバ関数
| 新しいロケールを構築します (パブリックメンバ関数) | |
| ロケールおよび参照カウントがゼロになったファセットを破棄します (パブリックメンバ関数) | |
| ロケールを置き換えます (パブリックメンバ関数) | |
| 別のロケールからコピーされたコンパイル時に識別されるファセットを持つロケールを構築します (パブリックメンバ関数) | |
| ロケールの名前、または名前がない場合は "*" を返します (パブリックメンバ関数) | |
(C++20で削除) |
2つのロケールオブジェクトが等しいかどうか比較します (パブリックメンバ関数) |
| このロケールの照合ファセットを用いて2つの文字列を辞書的に比較します (パブリックメンバ関数) | |
[静的] |
グローバルなロケールを変更します (パブリック静的メンバ関数) |
[静的] |
"C" ロケールへの参照を取得します (パブリック静的メンバ関数) |
例
ロケール対応プログラム (クロスプラットフォーム) の一般的なプロローグをデモンストレーションします。
Run this code
#include <iostream>
#include <locale>
int main()
{
std::wcout << "User-preferred locale setting is " << std::locale("").name().c_str() << '\n';
// on startup, the global locale is the "C" locale
std::wcout << 1000.01 << '\n';
// replace the C++ global locale as well as the C locale with the user-preferred locale
std::locale::global(std::locale(""));
// use the new global locale for future wide character output
std::wcout.imbue(std::locale());
// output the same number again
std::wcout << 1000.01 << '\n';
}
出力例:
User-preferred locale setting is en_US.UTF8
1000.01
1,000.01
関連項目
| ロケールからファセットを取得します (関数テンプレート) | |
| ロケールが特定のファセットを実装しているかどうか調べます (関数テンプレート) | |
| ロケールを設定します ( std::ios_baseのパブリックメンバ関数)
| |
| 現在のロケールを返します ( std::ios_baseのパブリックメンバ関数)
|