Шаблонний клас std::num_put призначений для представлення чисел у форматованому вигляді в якості послідовності символів. Являється facet-об'єктом (похідний від класу locale::facet) об'єкту локалі. Оголошення виглядає приблизно наступним чином:
template <class charT, 
          class OutputIterator = ostreambuf_iterator<charT> > 
class num_put ;
Параметр шаблону charT призначений для вказування типу символів, з яким буде працювати примірник даного класу. Параметр OutputIterator призначений для вказування ітератора виводу, з яким буде працювати примірник. Стандартні об'єкти локалі повинні підтримувати наступні спеціалізовані об'єкти класу num_put:
  • num_put<char> призначений для використання з байтовими послідовностями символів і стандартним ітератором;
  • num_put<wchar_t> призначений для використання з розширеним типом символів і стандартним ітератором виводу.
Щоб використовувати даний клас, необхідно підключити файл locale:
#include <locale> /* num_get і усе корисне */

Нутрощі класу

/* конструктор */
explicit num_put (size_t refs=0) ;
Конструктор класу. Параметр refs призначений для управління автоматичним видаленням примірника класу:
  • коли refs має значення 0 (нуль) - об'єкт автоматично видаляється, коли останній об'єкт класу locale, який містить даний facet-об'єкт видаляється.
  • значення 1 - об'єкт автоматично не видаляється.
iter_type put (iter_type out, ios_base& str, char_type fill, bool val) const ;
iter_type put (iter_type out, ios_base& str, char_type fill, long val) const ;
iter_type put (iter_type out, ios_base& str, char_type fill, unsigned long val) const ;
iter_type put (iter_type out, ios_base& str, char_type fill, double val) const ;
iter_type put (iter_type out, ios_base& str, char_type fill, long double val) const ;
iter_type put (iter_type out, ios_base& str, char_type fill, const void* val) const ;
Виводить форматоване згідно локалі число у out. Параметр out являється ітераторм, який вказує на місце, куди метод буде вставляти послідовність символів. Параметр str являється об'єктом клас якого похідний від ios_base (зазвичай об'єкт потокового виводу). Він використовується для отримання інформації про форматування. Параметр fill призначений для вказування символу заповнення, коли форматоване представлення переданого значення не заповнює собою необхідну відведену кількість символів. Параметр val призначений для передачі самого значення, яке повинне бути виведеним у потік. Даний метод являється делегатом - він викликає захищений метод do_put, який реалізовують дочірні класи даного.

Приклад

Розглянемо простий приклад використання класу.
#include <locale> /* num_put і все корисне */
#include <iostream> /* об'єкт wcout */
using namespace std ; /* друкуємо без std */

/* головна функція програми */
int main (int argc, char** argv)
{
  /* створюємо бажану локаль 
  ** вказану користувачем */
  locale loc ("") ;
  
  /* перевіряємо присутність потрібного нам facet-об'єкта */
  if (!has_facet< num_put<wchar_t> > (loc))
  {
    /* якщо facet-об'єкт відсутній - 
    ** виводимо повідомлення і 
    ** завершуємо роботу програми */
    cout << "Локаль " << loc.name() << " немає num_put<wchar_t>." ;
    
    return 0 ;
  }
  
  /* отримуємо необхідний примірник num_put */
  const num_put<wchar_t>& np = use_facet < num_put<wchar_t> > (loc) ;
  
  /* створюємо ітератор виводу з буфера об'єкта wcout */
  ostreambuf_iterator<wchar_t> oit (wcout.rdbuf()) ;
  
  /* створюємо значення, яке 
  ** будемо виводити на екран */
  double myval = 102410.1024 ;
  
  /* викликаємо метод put facet-об'єкта */
  np.put (oit, wcout, ' ', myval) ;
  
  /* створюємо новий рядок */
  wcout << endl ;
  
  return 0 ;
}
Вивід програми: cpp_std_num_put_sample1-cxx
Категорії: