Шаблонна функція 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 ;
}
Вивід програми наступний: cpp_std_has_facet_sample1-cxx_output
Категорії: