25 Localization library [localization]

25.4 Standard locale categories [locale.categories]

25.4.6 The monetary category [category.monetary]

25.4.6.2 Class template money_­put [locale.money.put]

namespace std {
  template <class charT, class OutputIterator = ostreambuf_iterator<charT>>
    class money_put : public locale::facet {
    public:
      using char_type   = charT;
      using iter_type   = OutputIterator;
      using string_type = basic_string<charT>;

      explicit money_put(size_t refs = 0);

      iter_type put(iter_type s, bool intl, ios_base& f,
                    char_type fill, long double units) const;
      iter_type put(iter_type s, bool intl, ios_base& f,
                    char_type fill, const string_type& digits) const;

      static locale::id id;

    protected:
      ~money_put();
      virtual iter_type do_put(iter_type, bool, ios_base&, char_type fill,
                               long double units) const;
      virtual iter_type do_put(iter_type, bool, ios_base&, char_type fill,
                               const string_type& digits) const;
    };
}

25.4.6.2.1 money_­put members [locale.money.put.members]

iter_type put(iter_type s, bool intl, ios_base& f, char_type fill, long double quant) const; iter_type put(iter_type s, bool intl, ios_base& f, char_type fill, const string_type& quant) const;

Returns: do_­put(s, intl, f, loc, quant).

25.4.6.2.2 money_­put virtual functions [locale.money.put.virtuals]

iter_type do_put(iter_type s, bool intl, ios_base& str, char_type fill, long double units) const; iter_type do_put(iter_type s, bool intl, ios_base& str, char_type fill, const string_type& digits) const;

Effects: Записывает символы в s соответствии с форматом, указаннымmoneypunct<charT, Intl> ссылкой на фасет, mp и отображением символов, указаннымctype<charT> ссылкой на фасет, ct полученной из языкового стандарта, возвращаемого параметрами str.getloc(), и str.flags(). Аргумент units преобразуется в последовательность широких символов, как если бы

ct.widen(buf1, buf1 + sprintf(buf1, "%.0Lf", units), buf2)

для символьных буферов buf1 и buf2. Если первый символ в digits или buf2 равен ct.widen('-'), то шаблон, используемый для форматирования, является результатом mp.neg_­format(); в противном случае узор является результатом mp.pos_­format(). Цифровые символы записываются с вкраплениями разделителей тысяч и десятичной точки, указанных в формате, в том порядке, в котором они появляются (после необязательного ведущего знака минус) в digits или buf2. В digitsиспользуются только необязательный начальный знак минус и непосредственно следующие за ним цифровые символы (согласно классификации ct); любые завершающие символы (включая цифры, появляющиеся после нецифрового символа) игнорируются. Звонки str.width(0).

Remarks: Символ валюты генерируется тогда и только тогда, когда он не (str.flags() & str.showbase) равен нулю. Если количество символов, сгенерированных для указанного формата, меньше значения, возвращаемогоstr.width() функцией при входе в функцию, то копии fill вставляются по мере необходимости для заполнения до указанной ширины. Для значения, af равного (str.flags() & str.adjustfield), если (af == str.internal) есть true, символы заполнения помещаются там, где none или space появляются в шаблоне форматирования; в противном случае, если (af == str.left) есть true, они помещаются после других символов; в противном случае они помещаются перед другими символами. [ Note: Возможно, с некоторыми комбинациями шаблонов формата и значений флагов, чтобы произвести вывод, который не может быть проанализирован с использованием num_­get<>​::​get. ]end note

Returns: Итератор, указывающий сразу после последнего созданного символа.