派生类方面的方法是从基类调用的吗?

时间:2013-07-23 12:51:01

标签: c++ locale

说我有这样的设置:

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

当我尝试使用std::use_facet调用facet实例的方法时,是否会实际调用其派生类facet(即“byname”facet)方法?例如,这样做:

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

做一些概念等同于此:

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

我认为是这种情况,因为一些派生类facet(在本例中为std::ctype_byname)实现了基类的虚函数。我是否正确地假设这个?

1 个答案:

答案 0 :(得分:0)

不,它将是对将返回的std::ctype<char>方面的引用。 std::ctype facet的方法(在构建其语言环境时不是默认构造的)将根据安装它的语言环境运行。使用byname方面意味着您需要一个特定的文化约定来应用其可能与其语言环境不同的方法。它填充与基类facet相同的插槽,因此use_facet不会返回一个byname方面。