0

次のような設定があるとします。

std::locale::global(std::locale("en_US.UTF8"));
stream.imbue(std::locale());

を使用してファセットのインスタンスのメソッドを呼び出そうとすると、std::use_facetその派生クラスのファセット (つまり、"byname" ファセット) のメソッドが実際に呼び出されますか? たとえば、次のようにします。

std::use_facet<std::ctype<char>>(stream.getloc()).is( /*... */ );

これと概念的に同等のことを行います。

std::ctype_byname<char>("C").is( /* ... */ );

これは、一部の派生クラス ファセット (この場合std::ctype_bynameは ) が基本クラスの仮想関数を実装しているためです。これを仮定するのは正しいですか?

4

1 に答える 1

0

いいえ、 std::ctype<char>返されるファセットへの参照になります。ファセットのメソッドstd::ctype(ロケールの構築時にデフォルトで構築されなかったもの) は、インストール先のロケールに基づいて動作します。byname ファセットを使用するということは、ロケールとは異なる可能性があるメソッドを適用する特定の文化的慣習が必要であることを意味します。基本クラスのファセットと同じスロットを埋めるためuse_facet、byname ファセットは返されません。

于 2013-07-29T13:47:42.370 に答える