std::use_facet
Определено в заголовке <locale> |
||
|---|---|---|
template< class Facet > const Facet& use_facet( const std::locale& loc ); |
Получает ссылку на фасет, реализованный loc.
Программа некорректна, если Facet не является фасетом, чье определение содержит общедоступный статический член id или это фасет с квалификатором volatile.
Параметры
| loc | - | объект локали для запроса |
Значение результата
Возвращает ссылку на фасет. Ссылка, возвращаемая этой функцией, действительна до тех пор, пока любой объект std::locale ссылается на этот фасет.
Исключения
std::bad_cast если std::has_facet<Facet>(loc) == false.
Пример
Выводит название валюты из 3-х букв, используемое в пользовательской локали.
#include <iostream>
#include <locale>
int main()
{
for (const char* name: {"en_US.UTF-8", "de_DE.UTF-8", "en_GB.UTF-8"})
{
std::locale loc = std::locale(name); // user's preferred locale
std::cout << "Your currency string is "
<< std::use_facet<std::moneypunct<char, true>>(loc).
curr_symbol() << '\n';
}
}Вывод:
Your currency string is USD Your currency string is EUR Your currency string is GBP
Отчеты об ошибках
Следующие отчеты об ошибках, изменяющие поведение, были применены ретроактивно к ранее опубликованным стандартам C++.
| DR | Применено к | Поведение, как опубликовано | Корректное поведение |
|---|---|---|---|
| LWG 31 | C++98 | возвращаемая ссылка оставалась пригодной до тех пор, пока существовало значение локали |
возвращаемая ссылка остается пригодной, пока какой-либо объект локали ссылается на этот фасет |
| LWG 38 | C++98 |
Facet не должно было иметь прямого члена id |
обязательно |
| LWG 436 | C++98 | неясно, можно ли применять cv-квалификатор к Facet |
можно применять const-квалификатор, но не volatile-квалификатор |
См. также
| набор полиморфных фасетов, которые описывают культурные различия (класс) |
|
| проверяет, реализует ли локали определенный фасет (шаблон функции) |
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/w/cpp/locale/use_facet