Так как Windows не имеет локали C++ с поддержкой UTF8 по умолчанию, я хотел бы создать пользовательский объект языкового стандарта, который поддерживает UTF8 (путем создания его с пользовательским фасетом ctype).
Как я могу создать объект языкового стандарта со своей собственной ctype реализацией (я только нашел, что функции создали локаль с помощью уже существующей локали в качестве основы..)
Если C++ не поддерживает конструкцию локалей с пользовательским фасетом ctype вообще, почему то, что так?
Можно создавать собственные фасеты путем наследования от std :: locale :: facet. Локали могут использовать эти настраиваемые фасеты, как показано в следующем коде:
class custom_facet : public std::locale::facet {
public:
static std::locale::id id;
custom_facet(int);
int custom_value() const;
};
std::locale custom_locale ( std::locale(), new custom_facet() );
int s = std::use_facet<custom_facet>(custom_locale).custom_value();