Заголовок <iomanip> определяет несколько функций, которые поддерживают экстракторы и вставщики, которые позволяют анализировать и форматировать последовательности и значения за деньги и время.
template <class moneyT> unspecified get_money(moneyT& mon, bool intl = false);
Effects: Выражение, in >> get_money(mon, intl) описанное ниже, ведет себя как formatted input function.
Returns: Объект неопределенного типа, такой что if in является объектом типа, basic_istream<charT, traits> тогда выражение in >> get_money(mon, intl) ведет себя так, как если бы оно было вызвано f(in, mon, intl), где функция f определяется как:
template <class charT, class traits, class moneyT> void f(basic_ios<charT, traits>& str, moneyT& mon, bool intl) { using Iter = istreambuf_iterator<charT, traits>; using MoneyGet = money_get<charT, Iter>; ios_base::iostate err = ios_base::goodbit; const MoneyGet& mg = use_facet<MoneyGet>(str.getloc()); mg.get(Iter(str.rdbuf()), Iter(), intl, str, err, mon); if (ios_base::goodbit != err) str.setstate(err); }
Выражение in >> get_money(mon, intl) должно иметь тип basic_istream<charT, traits>& и значение in.
template <class moneyT> unspecified put_money(const moneyT& mon, bool intl = false);
Returns: Объект неопределенного типа, такой что if out является объектом типа, basic_ostream<charT, traits> тогда выражение out << put_money(mon, intl) ведет себя как formatted output function вызывающий объектf(out, mon, intl), где функция f определяется как:
template <class charT, class traits, class moneyT> void f(basic_ios<charT, traits>& str, const moneyT& mon, bool intl) { using Iter = ostreambuf_iterator<charT, traits>; using MoneyPut = money_put<charT, Iter>; const MoneyPut& mp = use_facet<MoneyPut>(str.getloc()); const Iter end = mp.put(Iter(str.rdbuf()), intl, str, str.fill(), mon); if (end.failed()) str.setstate(ios::badbit); }
Выражение out << put_money(mon, intl) должно иметь тип basic_ostream<charT, traits>& и значение out.
template <class charT> unspecified get_time(struct tm* tmb, const charT* fmt);
Requires: Аргумент tmb должен быть действительным указателем на объект типа struct tm. Аргумент fmt должен быть действительным указателем на массив объектов типа charT с char_traits<charT>::length(fmt) элементами.
Returns: Объект неопределенного типа, такой что if in является объектом типа, basic_istream<charT, traits> тогда выражение in >> get_time(tmb, fmt) ведет себя так, как если бы оно было вызвано f(in, tmb, fmt), где функция f определяется как:
template <class charT, class traits> void f(basic_ios<charT, traits>& str, struct tm* tmb, const charT* fmt) { using Iter = istreambuf_iterator<charT, traits>; using TimeGet = time_get<charT, Iter>; ios_base::iostate err = ios_base::goodbit; const TimeGet& tg = use_facet<TimeGet>(str.getloc()); tg.get(Iter(str.rdbuf()), Iter(), str, err, tmb, fmt, fmt + traits::length(fmt)); if (err != ios_base::goodbit) str.setstate(err); }
Выражение in >> get_time(tmb, fmt) должно иметь тип basic_istream<charT, traits>& и значение in.
template <class charT> unspecified put_time(const struct tm* tmb, const charT* fmt);
Requires: Аргумент tmb должен быть действительным указателем на объект типа struct tm, а аргумент fmt должен быть действительным указателем на массив объектов типа charT с char_traits<charT>::length(fmt) элементами.
Returns: Объект неопределенного типа, такой что if out является объектом типа, basic_ostream<charT, traits> тогда выражение out << put_time(tmb, fmt) ведет себя так, как если бы оно было вызвано f(out, tmb, fmt), где функция f определяется как:
template <class charT, class traits> void f(basic_ios<charT, traits>& str, const struct tm* tmb, const charT* fmt) { using Iter = ostreambuf_iterator<charT, traits>; using TimePut = time_put<charT, Iter>; const TimePut& tp = use_facet<TimePut>(str.getloc()); const Iter end = tp.put(Iter(str.rdbuf()), str, str.fill(), tmb, fmt, fmt + traits::length(fmt)); if (end.failed()) str.setstate(ios_base::badbit); }
Выражение out << put_time(tmb, fmt) должно иметь тип basic_ostream<charT, traits>& и значение out.