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は、文字バッファbuf1、buf2に対して以下を行ったかのように、文字の列へ変換される。
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