money_get クラス
このクラス テンプレートは、CharType
型のシーケンスから通貨値への変換を制御するためにロケール ファセットとして使用できるオブジェクトを表します。
構文
template <class CharType, class InputIterator = istreambuf_iterator<CharType>>
class money_get : public locale::facet;
パラメーター
CharType
ロケールの文字をエンコードするためにプログラム内で使用される型。
InputIterator
get 関数が入力を読み取る反復子の型。
解説
すべてのロケールのファセットと同様、静的オブジェクト ID に最初に格納されている値は 0 です。 格納されている値に初めてアクセスしようとすると、id に一意の正の値が格納されます。
コンストラクター
コンストラクター | 説明 |
---|---|
money_get | 通貨値を表すシーケンスから数値を抽出するために使用される money_get 型のオブジェクトのコンストラクター。 |
Typedefs
型名 | 説明 |
---|---|
char_type | ロケールによって使用される文字を表すために使用される型。 |
iter_type | 入力反復子を表す型。 |
string_type | CharType 型の文字を格納する文字列を表す型。 |
メンバー関数
メンバー関数 | 説明 |
---|---|
do_get | 通貨値を表す文字シーケンスから数値を抽出するために呼び出される仮想関数。 |
get | 通貨値を表す文字シーケンスから数値を抽出します。 |
要件
ヘッダー: <locale>
名前空間: std
money_get::char_type
ロケールによって使用される文字を表すために使用される型。
typedef CharType char_type;
解説
この型は、テンプレート パラメーター CharType のシノニムです。
money_get::d o_get
通貨値を表す文字シーケンスから数値を抽出するために呼び出される仮想関数。
virtual iter_type do_get(iter_type first,
iter_type last,
bool Intl,
ios_base& Iosbase,
ios_base::iostate& State,
long double& val) const virtual iter_type do_get(iter_type first,
iter_type last,
bool Intl,
ios_base& Iosbase,
ios_base::iostate& State,
string_type& val) const
パラメーター
first
変換されるシーケンスの開始位置を示す入力反復子。
last
変換されるシーケンスの終了位置を示す入力反復子。
Intl
シーケンスで期待される通貨記号の種類を示すブール値。国際通貨の場合は true
、国内通貨の場合は false
。
Iosbase
書式設定フラグ。これが設定されている場合、通貨記号は省略可能です。それ以外の場合は必須です。
State
操作が成功したか失敗したかに基づいて、ストリームの状態に適したビットマスク要素を設定します。
val
変換後のシーケンスを格納する文字列。
戻り値
通貨入力フィールドを超える先頭の要素を示す入力反復子。
解説
1 番目のプロテクト仮想メンバー関数は、シーケンス [ first
, last
) の先頭から始め、空でない完全な通貨入力フィールドを認識するまで、連続した要素との一致を試みます。 成功した場合、このフィールドを 1 桁以上の 10 進数字のシーケンス (必要に応じて頭にマイナス記号 ( -
) が付く) に変換して値を表し、その結果を string_type オブジェクト val に格納します。 そして、通貨入力フィールドを超える先頭の要素を指す反復子を返します。 それ以外の場合、この関数は val に空のシーケンスを格納し、ios_base::failbit
に State を設定します。 そして、有効な通貨入力フィールドのプレフィックスを超える先頭の要素を指す反復子を返します。 いずれの場合も、戻り値が last
と等しい場合、関数は State
に ios_base::eofbit
を設定します。
2 番目のプロテクト仮想メンバー関数は 1 番目と同様に動作します。ただし、成功した場合は、必要に応じて符号を付けた数字シーケンスを long double
型の値に変換し、その値を val に格納します。
通貨入力フィールドの形式は、有効な呼び出しuse_facet<moneypunct<CharType、intl>>( iosbaseによって返されるlocale ファセットによって決まりますgetloc)。
具体的には、次のように使用します。
fac. neg_format は、フィールドのコンポーネントが発生する順序を決定します。
fac. curr_symbol 通貨記号を構成する要素のシーケンスを決定します。
fac. positive_sign は、正符号を構成する要素のシーケンスを決定します。
fac. negative_sign は、負の符号を構成する要素のシーケンスを決定します。
fac. grouping は、小数点の左側の数字をグループ化する方法を決定します。
fac. thousands_sep は、小数点の左側にある数字のグループを区切る要素を決定します。
fac. decimal_point は、整数の数字と小数部の数字を区切る要素を決定します。
fac. frac_digits は、小数点の右側にある有効小数桁の数を決定します。
frac_digits
によって要求される小数桁数を上回る桁数の値を解析する場合、do_get
は最大でfrac_digits
文字を処理した後、解析を停止します。
符号文字列 ( fac. negative_sign
または fac. positive_sign
) に複数の要素がある場合、最初の要素のみが照合され、 money_base::sign が形式パターン ( fac. neg_format
) に表示されます。 残りの要素は、通貨入力フィールドの末尾で一致します。 いずれの文字列も通貨入力フィールド内の先頭の要素が次の要素と一致していない場合、符号文字列は空と見なされ、符号は正になります。
iosbase. flags & showbase は 0 以外で、文字列 fac。 curr_symbol
は、 money_base::symbol と等しい要素が形式パターンで出現する場所と一致する必要があります。 このようにしないと、書式パターンの末尾に money_base::symbol が出現する場合、および一致せずに残っている符号文字列の要素がない場合に、通貨記号は一致しません。 それ以外の場合は、必要に応じて通貨記号が一致します。
fac のインスタンスがない場合。 thousands_sep
は、通貨入力フィールドの値部分で発生します (要素が money_base::value 形式パターンで表示されます)、グループ化の制約は適用されません。 それ以外の場合は、 facによって課されるグループ化制約。 グループ化 が適用されます。 結果の数字シーケンスは、下位の fac を持つ整数を表します。 frac_digits
10 進数は、小数点の右側と見なされます。
任意の余白は、書式パターンの末尾以外に出現する場合、money_base::space と等しい要素が書式パターンに出現しているときに一致します。 それ以外の場合、内部の余白は一致しません。 要素 ch は、 use_facet<ctype<CharType>>( iosbase の場合は空白と見なされます。 getloc)。 is( ctype_base::space, ch) が true
。
例
get の例 (do_get
を呼び出す) を参照してください。
money_get::get
通貨値を表す文字シーケンスから数値を抽出します。
iter_type get(iter_type first,
iter_type last,
bool Intl,
ios_base& Iosbase,
ios_base::iostate& State,
long double& val) const;
iter_type get(iter_type first,
iter_type last,
bool Intl,
ios_base& Iosbase,
ios_base::iostate& State,
string_type& val) const;
パラメーター
first
変換されるシーケンスの開始位置を示す入力反復子。
last
変換されるシーケンスの終了位置を示す入力反復子。
Intl
シーケンスで期待される通貨記号の種類を示すブール値。国際通貨の場合は true
、国内通貨の場合は false
。
Iosbase
書式設定フラグ。これが設定されている場合、通貨記号は省略可能です。それ以外の場合は必須です
State
操作が成功したかどうかに基づき、ストリームの状態に適したビットマスク要素を設定します。
val
変換後のシーケンスを格納する文字列。
戻り値
通貨入力フィールドを超える先頭の要素を示す入力反復子。
解説
どちらのメンバー関数も do_get(first, last, Intl, Iosbase, State, val)
を返します。
例
// money_get_get.cpp
// compile with: /EHsc
#include <locale>
#include <iostream>
#include <sstream>
using namespace std;
int main( )
{
locale loc( "german_germany" );
basic_stringstream< char > psz;
psz << use_facet<moneypunct<char, 1> >(loc).curr_symbol() << "-1.000,56";
basic_stringstream< char > psz2;
psz2 << "-100056" << use_facet<moneypunct<char, 1> >(loc).curr_symbol();
ios_base::iostate st = 0;
long double fVal;
psz.flags( psz.flags( )|ios_base::showbase );
// Which forced the READING the currency symbol
psz.imbue(loc);
use_facet < money_get < char > >( loc ).
get( basic_istream<char>::_Iter( psz.rdbuf( ) ),
basic_istream<char>::_Iter( 0 ), true, psz, st, fVal );
if ( st & ios_base::failbit )
cout << "money_get(" << psz.str( ) << ", intl = 1) FAILED"
<< endl;
else
cout << "money_get(" << psz.str( ) << ", intl = 1) = "
<< fVal/100.0 << endl;
use_facet < money_get < char > >( loc ).
get(basic_istream<char>::_Iter(psz2.rdbuf( )),
basic_istream<char>::_Iter(0), false, psz2, st, fVal);
if ( st & ios_base::failbit )
cout << "money_get(" << psz2.str( ) << ", intl = 0) FAILED"
<< endl;
else
cout << "money_get(" << psz2.str( ) << ", intl = 0) = "
<< fVal/100.0 << endl;
};
money_get::iter_type
入力反復子を表す型。
typedef InputIterator iter_type;
解説
この型は、テンプレート パラメーター InputIterator のシノニムです。
money_get::money_get
通貨値を表すシーケンスから数値を抽出するために使用される money_get
型のオブジェクトのコンストラクター。
explicit money_get(size_t _Refs = 0);
パラメーター
_Refs
オブジェクトのメモリ管理の種類を指定するために使用する整数値。
解説
_Refs パラメーターの可能な値とその重要性は次のとおりです。
0: オブジェクトの有効期間はそれが含まれるロケールによって管理されます。
1: オブジェクトの有効期間を手動で管理する必要があります。
> 1: これらの値は定義されていません。
デストラクターが保護されているため、利用できる直接的な例はありません。
コンストラクターは、locale::facet(_Refs) を使用して、その基本オブジェクトを初期化します。
money_get::string_type
CharType 型の文字を格納する文字列を表す型。
typedef basic_string<CharType, Traits, Allocator> string_type;
解説
この型は、特殊化したクラス テンプレート basic_string を表します。