0

假设我有这样的设置:

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

当我尝试使用 调用构面实例的方法时std::use_facet,它的派生类构面(即“别名”构面)方法实际上会被调用吗?例如,这样做:

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方面的方法(不是在构建其语言环境时默认构建的)将根据它安装到的语言环境运行。使用别名方面意味着您需要一个特定的文化约定来应用可能与其语言环境不同的方法。它填充与基类 facet 相同的插槽,因此use_facet不会返回别名 facet。

于 2013-07-29T13:47:42.370 回答