最終更新日時:
が更新

履歴 編集

function
<locale>

std::money_put::do_put

protected:
  virtual iter_type
    do_put(iter_type s,
           bool intl,
           ios_base& str,
           char_type fill,
           long double units) const;         // (1) C++98

  virtual iter_type
    do_put(iter_type s,
           bool intl,
           ios_base& str,
           char_type fill,
           const string_type& digits) const;  // (2) C++98

概要

金額を書式化して出力する。put()から呼び出される、実際の書式化を行う仮想関数である。

  • (1) : 整数値として与えられた金額を出力する
  • (2) : 数字の列として与えられた金額を出力する

効果

sへ文字を書き込む。書式はstr.getloc()から取得したmoneypunct<charT, Intl>ファセットmp、文字の対応付けは同様に取得したctype<charT>ファセットct、およびstr.flags()によって決まる。

(1)の実引数unitsは、文字バッファbuf1buf2に対して以下を行ったかのように、文字の列へ変換される。

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

digitsもしくはbuf2の最初の文字がct.widen('-')と等しい場合、書式化に使用されるパターンはmp.neg_format()の結果である。そうでない場合はmp.pos_format()の結果である。

数字文字は、digitsもしくはbuf2に現れる順(省略可能な先頭のマイナス符号の後)に、書式が指定する桁区切りと小数点を交えて書き込まれる。

(2)のdigitsでは、省略可能な先頭のマイナス符号と、それに続く数字文字(ctによる分類に従う)のみが使用される。それ以降の文字(非数字文字の後に現れる数字を含む)は無視される。

最後にstr.width(0)を呼び出す。

戻り値

生成した最後の文字の直後を指すイテレータ。

備考

通貨記号は、(str.flags() &std::ios_base::showbase)が非0である場合にのみ生成される。

指定された書式に対して生成された文字数が、関数開始時のstr.width()より少ない場合、指定された幅になるまで必要な数のfillが挿入される。af = (str.flags() &std::ios_base::adjustfield)として、

  • af ==std::ios_base::internalである場合、埋め文字は書式パターン内のnoneもしくはspaceが現れる位置に置かれる
  • af ==std::ios_base::leftである場合、他の文字の後ろに置かれる
  • そうでない場合、他の文字の前に置かれる

書式パターンとフラグの組み合わせによっては、num_get::getで解析できない出力が生成されることがある。

バージョン

言語

  • C++98

関連項目