num_get クラス
CharType
型のシーケンスから数値への変換を制御するためにロケール ファセットとして使用できるオブジェクトを表すクラス テンプレート。
構文
template <class CharType, class InputIterator = istreambuf_iterator<CharType>>
class num_get : public locale::facet;
パラメーター
CharType
ロケールの文字をエンコードするためにプログラム内で使用される型。
InputIterator
数値の get 関数が入力を読み取る反復子の型。
解説
すべてのロケールのファセットと同様、静的オブジェクト ID に最初に格納されている値は 0 です。 格納されている値に初めてアクセスしようとすると、id に一意の正の値が格納されます。
コンストラクター
コンストラクター | 説明 |
---|---|
num_get | シーケンスから数値を抽出するために使用される num_get 型のオブジェクトのコンストラクター。 |
Typedefs
型名 | 説明 |
---|---|
char_type | ロケールによって使用される文字を表すために使用される型。 |
iter_type | 入力反復子を表す型。 |
メンバー関数
メンバー関数 | 説明 |
---|---|
do_get | 文字シーケンスから数値またはブール値を抽出するために呼び出される仮想関数。 |
get | 文字シーケンスから数値のまたはブール値を抽出します。 |
要件
ヘッダー: <locale>
名前空間: std
num_get::char_type
ロケールによって使用される文字を表すために使用される型。
typedef CharType char_type;
解説
この型は、テンプレート パラメーター CharType のシノニムです。
num_get::d o_get
文字シーケンスから数値またはブール値を抽出するために呼び出される仮想関数。
virtual iter_type do_get(
iter_type first,
iter_type last,
ios_base& iosbase,
ios_base::iostate& state,
long& val) const;
virtual iter_type do_get(
iter_type first,
iter_type last,
ios_base& iosbase,
ios_base::iostate& state,
unsigned short& val) const;
virtual iter_type do_get(
iter_type first,
iter_type last,
ios_base& iosbase,
ios_base::iostate& state,
unsigned int& val) const;
virtual iter_type do_get(
iter_type first,
iter_type last,
ios_base& iosbase,
ios_base::iostate& state,
unsigned long& val) const;
virtual iter_type do_get(
iter_type first,
iter_type last,
ios_base& iosbase,
ios_base::iostate& state,
long long& val) const;
virtual iter_type do_get(
iter_type first,
iter_type last,
ios_base& iosbase,
ios_base::iostate& state,
unsigned long long& val) const;
virtual iter_type do_get(
iter_type first,
iter_type last,
ios_base& iosbase,
ios_base::iostate& state,
float& val) const;
virtual iter_type do_get(
iter_type first,
iter_type last,
ios_base& iosbase,
ios_base::iostate& state,
double& val) const;
virtual iter_type do_get(
iter_type first,
iter_type last,
ios_base& iosbase,
ios_base::iostate& state,
long double& val) const;
virtual iter_type do_get(
iter_type first,
iter_type last,
ios_base& iosbase,
ios_base::iostate& state,
void *& val) const;
virtual iter_type do_get(
iter_type first,
iter_type last,
ios_base& iosbase,
ios_base::iostate& state,
bool& val) const;
パラメーター
first
数値を読み取る文字の範囲の開始位置。
last
数値を読み取る文字の範囲の終了位置。
iosbase
変換で使用されるフラグが含まれる Ios_base。
state
失敗した場合に failbit が追加される状態 (「ios_base::iostate」を参照)。
val
読み取られた値。
戻り値
値が読み取られた後の反復子。
解説
1 番目のプロテクト仮想メンバー関数:
virtual iter_type do_get(
iter_type first,
iter_type last,
ios_base& iosbase,
ios_base::iostate& state,
long& val) const;
この関数は、シーケンス [first, last)
の first から始め、空でない完全な整数入力フィールドを認識するまで、連続した要素と一致します。 成功すると、このフィールドを long
型の同等の値に変換し、結果を val に格納します。 これは、数値入力フィールドを超える先頭の要素を指す反復子を返します。 それ以外の場合、この関数は val に何も格納しないで、state
に ios_base::failbit
を設定します。 これは、有効な整数入力フィールドのプレフィックスを超える先頭の要素を指す反復子を返します。 いずれの場合も、戻り値が last
と等しい場合、関数は state
に ios_base::eofbit
を設定します。
整数入力フィールドは、スキャン機能がファイルから一連の char
要素と一致および変換する際に使用する規則と同じ規則で変換されます。 (このような各 char
要素は、単純な 1 対 1 のマッピングによって Elem
型の同等の要素にマップされると見なされます)。同等のスキャン変換仕様は、次のように決定されます。
iosbase.
ios_base::flags() & ios_base::basefield == ios_base::
oct の場合、変換仕様は lo
です。
iosbase.flags() & ios_base::basefield == ios_base::
hex の場合、変換仕様は lx
です。
iosbase.flags() & ios_base::basefield == 0
の場合、変換仕様は li
です。
それ以外の場合、変換仕様は ld
です。
整数入力フィールドの形式は、use_facet <
numpunct<Elem>(iosbase.
ios_base::getlocfac
())
の呼び出しによって返される locale ファセットによってさらに決定されます。 具体的には、次のように使用します。
fac.
numpunct::grouping()
は、小数点の左側の数字をグループ化する方法を決定します。
fac.
numpunct::thousands_sep()
は、小数点の左側にある数字のグループを区切るシーケンスを決定します。
数値入力フィールドに fac.thousands_sep()
のインスタンスがない場合、グループ化の制約は強制されません。 それ以外の場合は、fac.grouping()
によって強制されたグループ化の制約が適用され、スキャンの変換が行われる前に区切り記号が削除されます。
4 番目のプロテクト仮想メンバー関数:
virtual iter_type do_get(
iter_type first,
iter_type last,
ios_base& iosbase,
ios_base::iostate& state,
unsigned long& val) const;
この関数の動作は 1 番目と同じですが、ld
の変換仕様を lu
に置き換えている点が異なります。 成功すると、数値入力フィールドを unsigned long
型の値に変換し、その値を val に格納します。
5 番目のプロテクト仮想メンバー関数:
virtual iter_type do_get(
iter_type first,
iter_type last,
ios_base& iosbase,
ios_base::iostate& state,
long long& val) const;
この関数の動作は 1 番目と同じですが、ld
の変換仕様を lld
に置き換えている点が異なります。 成功すると、数値入力フィールドを long long
型の値に変換し、その値を val に格納します。
6 番目のプロテクト仮想メンバー関数:
virtual iter_type do_get(
iter_type first,
iter_type last,
ios_base& iosbase,
ios_base::iostate& state,
unsigned long long& val) const;
この関数の動作は 1 番目と同じですが、ld
の変換仕様を llu
に置き換えている点が異なります。 成功すると、数値入力フィールドを unsigned long long
型の値に変換し、その値を val に格納します。
7 番目のプロテクト仮想メンバー関数:
virtual iter_type do_get(
iter_type first,
iter_type last,
ios_base& iosbase,
ios_base::iostate& state,
float& val) const;
この関数の動作は 1 番目と同じですが、空でない完全な浮動小数点入力フィールドとの一致を試みる点が異なります。 fac.
numpunct::decimal_point()
は、整数桁と小数桁を区切るシーケンスを決定します。 同等のスキャン変換指定子は lf
です。
8 番目のプロテクト仮想メンバー関数:
virtual iter_type do_get(
iter_type first,
iter_type last,
ios_base& iosbase,
ios_base::iostate& state,
double& val) const;
この関数の動作は 1 番目と同じですが、空でない完全な浮動小数点入力フィールドとの一致を試みる点が異なります。 fac.
numpunct::decimal_point()
は、整数桁と小数桁を区切るシーケンスを決定します。 同等のスキャン変換指定子は lf
です。
9 番目のプロテクト仮想メンバー関数:
virtual iter_type do_get(
iter_type first,
iter_type last,
ios_base& iosbase,
ios_base::iostate& state,
long double& val) const;
この関数の動作は 8 番目と同じですが、同等のスキャン変換指定子が Lf
である点が異なります。
10 番目のプロテクト仮想メンバー関数:
virtual iter_type do_get(
iter_type first,
iter_type last,
ios_base& iosbase,
ios_base::iostate& state,
void *& val) const;
この関数の動作は 1 番目と同じですが、同等のスキャン変換指定子が p
である点が異なります。
最後 (11 番目) のプロテクト仮想メンバー関数:
virtual iter_type do_get(
iter_type first,
iter_type last,
ios_base& iosbase,
ios_base::iostate& state,
bool& val) const;
この関数の動作は 1 番目と同じですが、空でない完全なブール値入力フィールドとの一致を試みる点が異なります。 成功すると、ブール値入力フィールドを bool
型の値に変換し、その値を val に格納します。
ブール値入力フィールドは、次の 2 つの形式のいずれかになります。 iosbase.flags() & ios_base::
boolalpha が false の場合、これは整数入力フィールドと同じですが、変換後の値が 0 (false の場合) または 1 (true の場合) のいずれかである必要がある点が異なります。 それ以外の場合、シーケンスは fac.
numpunct::falsename()
(false の場合) または fac.
numpunct::truename()
(true の場合) のいずれかに一致する必要があります。
例
get の例 (仮想メンバー関数が do_get
で呼び出される) を参照してください。
num_get::get
文字シーケンスから数値のまたはブール値を抽出します。
iter_type get(
iter_type first,
iter_type last,
ios_base& iosbase,
ios_base::iostate& state,
bool& val) const;
iter_type get(
iter_type first,
iter_type last,
ios_base& iosbase,
ios_base::iostate& state,
unsigned short& val) const;
iter_type get(
iter_type first,
iter_type last,
ios_base& iosbase,
ios_base::iostate& state,
unsigned int& val) const;
iter_type get(
iter_type first,
iter_type last,
ios_base& iosbase,
ios_base::iostate& state,
long& val) const;
iter_type get(
iter_type first,
iter_type last,
ios_base& iosbase,
ios_base::iostate& state,
unsigned long& val) const;
iter_type get(
iter_type first,
iter_type last,
ios_base& iosbase,
ios_base::iostate& state,
long long& val) const;
iter_type get(
iter_type first,
iter_type last,
ios_base& iosbase,
ios_base::iostate& state,
unsigned long long& val) const;
iter_type get(
iter_type first,
iter_type last,
ios_base& iosbase,
ios_base::iostate& state,
float& val) const;
iter_type get(
iter_type first,
iter_type last,
ios_base& iosbase,
ios_base::iostate& state,
double& val) const;
iter_type get(
iter_type first,
iter_type last,
ios_base& iosbase,
ios_base::iostate& state,
long double& val) const;
iter_type get(
iter_type first,
iter_type last,
ios_base& iosbase,
ios_base::iostate& state,
void *& val) const;
パラメーター
first
数値を読み取る文字の範囲の開始位置。
last
数値を読み取る文字の範囲の終了位置。
iosbase
変換で使用されるフラグが含まれる Ios_base。
state
失敗した場合に failbit が追加される状態 (「ios_base::iostate」を参照)。
val
読み取られた値。
戻り値
値が読み取られた後の反復子。
解説
すべてのメンバー関数が do_get( first, last, iosbase, state, val)
を返します。
1 番目のプロテクト仮想メンバー関数は、シーケンス [ first
, last
) の先頭から始め、空でない完全な整数入力フィールドを認識するまで、連続した要素との一致を試みます。 成功すると、このフィールドを long
型の同等の値に変換し、結果を val に格納します。 これは、数値入力フィールドを超える先頭の要素を指す反復子を返します。 それ以外の場合、この関数は val に何も格納しないで、state に ios_base::failbit
を設定します。 これは、有効な整数入力フィールドのプレフィックスを超える先頭の要素を指す反復子を返します。 いずれの場合も、戻り値が last と等しい場合、関数は state に ios_base::eofbit
を設定します。
整数入力フィールドは、スキャン機能がファイルから一連の char
要素と一致および変換する際に使用する規則と同じ規則で変換されます。 このような char
要素は、単純な一対一のマッピングで CharType
型の同等の要素にマップされると想定されます。 同等のスキャン変換仕様は次のように決定されます。
iosbase.
flags& ios_base::basefield == ios_base::
oct の場合、変換仕様はlo
です。iosbase.flags & ios_base::basefield == ios_base::
hex の場合、変換仕様はlx
です。iosbase.flags & ios_base::basefield == 0
の場合、変換仕様はli
です。それ以外の場合、変換仕様は
ld
です。
整数入力フィールドの形式は、 locale ファセットによってさらに決定されます fac
呼び出しによって返される use_facet<
numpunct
<Elem>(iosbase.
getloc())
。 具体的には、次のように使用します。
fac.
grouping は、小数点の左側の数字をグループ化する方法を決定します。fac.
thousands_sep は、小数点の左側にある数字のグループを区切るシーケンスを決定します。
数値入力フィールドに fac.thousands_sep
のインスタンスがない場合、グループ化の制約は強制されません。 それ以外の場合は、fac.grouping
によって強制されたグループ化の制約が適用され、スキャンの変換が行われる前に区切り記号が削除されます。
2 番目のプロテクト仮想メンバー関数:
virtual iter_type do_get(iter_type first,
iter_type last,
ios_base& iosbase,
ios_base::iostate& state,
unsigned long& val) const;
この関数の動作は 1 番目と同じですが、ld
の変換仕様を lu
に置き換えている点が異なります。 成功すると、数値入力フィールドを unsigned long
型の値に変換し、その値を val に格納します。
3 番目のプロテクト仮想メンバー関数:
virtual iter_type do_get(iter_type first,
iter_type last,
ios_base& iosbase,
ios_base::iostate& state,
double& val) const;
この関数の動作は 1 番目と同じですが、空でない完全な浮動小数点入力フィールドとの一致を試みる点が異なります。 fac.
decimal_point は、整数桁と小数桁を区切るシーケンスを決定します。 同等のスキャン変換指定子は lf
です。
4 番目のプロテクト仮想メンバー関数:
virtual iter_type do_get(iter_type first,
iter_type last,
ios_base& iosbase,
ios_base::iostate& state,
long double& val) const;
この関数の動作は 3 番目と同じですが、同等のスキャン変換指定子が Lf
である点が異なります。
5 番目のプロテクト仮想メンバー関数:
virtual iter_type do_get(iter_type first,
iter_type last,
ios_base& iosbase,
ios_base::iostate& state,
void *& val) const;
この関数の動作は 1 番目と同じですが、同等のスキャン変換指定子が p
である点が異なります。
6 番目のプロテクト仮想メンバー関数:
virtual iter_type do_get(iter_type first,
iter_type last,
ios_base& iosbase,
ios_base::iostate& state,
bool& val) const;
この関数の動作は 1 番目と同じですが、空でない完全なブール値入力フィールドとの一致を試みる点が異なります。 成功すると、ブール値入力フィールドを bool
型の値に変換し、その値を val に格納します。
ブール値入力フィールドは、次の 2 つの形式のいずれかになります。 iosbase.flags & ios_base::
boolalpha が false
の場合、これは整数入力フィールドと同じですが、変換後の値が 0 (false
の場合) または 1 (true
の場合) のいずれかである必要がある点が異なります。 それ以外の場合、シーケンスは、fac.
falsename (false
の場合) または fac.
truename (true
の場合) のいずれかに一致する必要があります。
例
// num_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, psz2;
psz << "-1000,56";
ios_base::iostate st = 0;
long double fVal;
cout << use_facet <numpunct <char> >(loc).thousands_sep( ) << endl;
psz.imbue( loc );
use_facet <num_get <char> >
(loc).get( basic_istream<char>::_Iter( psz.rdbuf( ) ),
basic_istream<char>::_Iter(0), psz, st, fVal );
if ( st & ios_base::failbit )
cout << "money_get( ) FAILED" << endl;
else
cout << "money_get( ) = " << fVal << endl;
}
num_get::iter_type
入力反復子を表す型。
typedef InputIterator iter_type;
解説
この型は、テンプレート パラメーター InputIterator
のシノニムです。
num_get::num_get
シーケンスから数値を抽出するために使用される num_get
型のオブジェクトのコンストラクター。
explicit num_get(size_t refs = 0);
パラメーター
refs
オブジェクトのメモリ管理の種類を指定するために使用する整数値。
解説
refs パラメーターの可能な値とその重要性は次のとおりです。
0: オブジェクトの有効期間はそれが含まれるロケールによって管理されます。
1: オブジェクトの有効期間を手動で管理する必要があります。
> 1: これらの値は定義されていません。
デストラクターが保護されているため、利用できる直接的な例はありません。
コンストラクターは、locale::
facet(refs)
を使用してその基本オブジェクトを初期化します。