C++ 標準ライブラリにはいくつかの標準基本クラス ファセットがあり、その既定の動作は従来の "C" ロケールに依存します ( std::locale::classic()
)。byname
これにより、プログラムが文化固有の機能を必要とする場合、その動作が構築時に指定されたロケールに依存する派生クラス ファセット (別名ファセット) に切り替えることが合理的になります。
たとえば、std::ctype
従来の「C」文字分類を提供します。
§22.4.1.3.3
static const mask* classic_table() noexcept;
table_size
戻り値: 「C」ロケールでの文字の分類を表すサイズの配列の最初の要素へのポインター
これは、 の動作が、インストール先のロケールの動作std::ctype
と機能的に異なるということですか? たとえば、日本語のロケールがあるとします。
std::locale loc("ja_JP");
そして、日本語の文字を分類するファセットを使いたいと思っていました。文字分類はstd::ctype
次の目的のためのものです。
auto& f = std::use_facet<std::ctype<char>>(loc);
f
のctype
メソッドは、日本語ロケールに基づいて文字を分類しますか、それとも古典的な「C」ロケールに基づいて分類しますか? 私の最初の推測では、上記の標準の引用に基づく "C" ロケールですが、実際には日本語ロケールです。引用がここで起こっていることに同意しないのはなぜだろうと思っています。
ここに私の質問があります:
ctype
ctype が使用されているロケールに基づいて実際に分類するときに、標準で「C」文字分類を実行すると言うのはなぜですか?上記が当てはまるので、派生クラスのファセットはどこに入るのですか? 必要なロケールが基本クラスで既に使用されているのに、派生クラスのファセットを使用する必要があるのはなぜですか?