Шаблонна функція std::has_facet призначена для перевірки присутності необхідного дочірнього класу facet у певній локалі. Оголошення функції виглядає наступним чином:
template <class Facet> bool has_facet (const locale& loc) throw() ;
Параметр loc призначений для вказування необхідної локалі. Параметр шаблону Facet, повинен вказувати на один з присутніх дочірніх класів facet, які представляють аспекти локалі, наприклад, станартні класи collate, codecvt, ctype, messages, moneypunct, money_get.
Функція повертає значення true, якщо вказаний дочірній клас facet присутній у локалі, і false у іншому випадку.
Щоб використовувати дану функцію, необхідно підключити файл locale:
#include <locale> /* усе корисне включно з has_facet */
Приклади
Розглянемо простий приклад використання даної функції:
#include <locale> /* has_facet */
#include <iostream>
using namespace std ; /* друкуємо без std */
/* головна функція програми */
int main (int argc, char** argv)
{
/* створюємо піддослідну локаль */
locale loc ("uk_UA.UTF-8") ;
/* перевіряємо піддослідну локаль
** на наявність класу messages<wchar_t>
** і виводимо відповідне повідомлення */
if (has_facet< messages<wchar_t> > (loc))
{
cout << "У локалі " << loc.name()
<< " мітиться facet-властивість messages<wchar_t>."
<< endl ;
const messages<wchar_t>& msg_facet = use_facet < messages<wchar_t> > (loc) ;
}
else
{
cout << "Локаль " << loc.name()
<< " немає facet-властивість messages<wchar_t>." << endl ;
}
return 0 ;
}
Вивід програми наступний: