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::do_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::failbitState を設定します。 そして、有効な通貨入力フィールドのプレフィックスを超える先頭の要素を指す反復子を返します。 いずれの場合も、戻り値が last と等しい場合、関数は Stateios_base::eofbit を設定します。

2 番目のプロテクト仮想メンバー関数は 1 番目と同様に動作します。ただし、成功した場合は、必要に応じて符号を付けた数字シーケンスを long double 型の値に変換し、その値を val に格納します。

通貨入力フィールドの形式は、有効な呼び出し use_facet<moneypunctCharType<, intl>>( iosbase) によって返されるロケール ファセットによって決まります。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_signfac. 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. grouping によって強制されたグループ化の制約が適用されます。 結果の数字シーケンスは整数を表し、この整数の下位の fac. frac_digits 桁の 10 進数字が小数点の右側にあると見なされることに注意してください。

任意の余白は、書式パターンの末尾以外に出現する場合、money_base::space と等しい要素が書式パターンに出現しているときに一致します。 それ以外の場合、内部の余白は一致しません。 要素 ch は、use_facet<ctypeCharType<>>( 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 を表します。

関連項目

<locale>
facet クラス
C++ 標準ライブラリ内のスレッド セーフ