2013-07-23 3 views
0

Скажет, у меня есть установки, как это:Являются ли методы графа производного класса вызываемыми из базового класса?

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

При попытке вызвать метод экземпляра фаски с помощью std::use_facet, будет его производный класс компании Facet (т.е. «клички» фаска) метод на самом деле можно назвать ? Например, это делает:

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

сделать что-то концептуально эквивалент этому:

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

Я полагаю, что это так, потому что некоторые производные фасеты класса (в данном случае std::ctype_byname) реализовать виртуальные функции базового класса. Правильно ли я предположить это?

ответ

0

Нет, это будет ссылка на фасет std::ctype<char>, который будет возвращен. Методы фасета std::ctype (который не был построен по умолчанию для построения его локали) будут работать на основе локали, к которой он был установлен. Использование фасета byname означает, что вы хотите создать конкретную культурную конвенцию, в которой можно применять свои методы, которые могут отличаться от ее локали. Он заполняет тот же слот, что и фасет базового класса, поэтому use_facet не вернет фасет по имени.