money_get 類別
類別範本描述可作為地區設定 Facet 的物件,以控制類型 CharType
序列轉換成貨幣值的順序。
語法
template <class CharType, class InputIterator = istreambuf_iterator<CharType>>
class money_get : public locale::facet;
參數
CharType
程式內用於編碼地區設定字元的類型。
InputIterator
get 函式從中讀取其輸入的迭代器類型。
備註
如同所有地區設定 facet,靜態物件識別碼有初始儲存值零。 第一次嘗試存取它的儲存值時,會在 id 中儲存一個唯一的正值。
建構函式
建構函式 | 描述 |
---|---|
money_get | money_get 類型物件的建構函式,用來從表示貨幣值的序列擷取數值。 |
Typedefs
類型名稱 | 描述 |
---|---|
char_type | 類型,用來描述由地區設定使用的字元。 |
iter_type | 描述輸入迭代器的類型。 |
string_type | 類型,描述包含 CharType 類型字元的字串。 |
成員函式
成員函數 | 描述 |
---|---|
do_get | 虛擬函式,呼叫以從代表貨幣值的字元序列擷取數值。 |
get | 從代表貨幣值的字元序列擷取數值。 |
需求
Header:<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
輸入迭代器,定址對象是要轉換之序列的結尾。
國際
布爾值,表示序列中預期的貨幣符號類型: true
如果是國際, false
則為國內。
Iosbase
格式旗標,已設定時,表示貨幣符號為選用;否則,必須指定貨幣符號。
州 (縣/市)
根據作業是否成功,為資料流狀態設定適當的位元遮罩元素。
val
儲存已轉換之序列的字串。
傳回值
輸入迭代器,定址對象是貨幣輸入欄位後的第一個元素。
備註
第一個虛擬的受保護成員函式會嘗試比對序列 [ first
, last
) 中從 first 開始的一系列元素,直到它辨識出完整、非空白的貨幣輸入欄位為止。 如果成功,它會將此字段轉換成一或多個十進位數序列,選擇性地前面加上減號 ( -
),以代表數量,並將結果儲存在 string_type 物件 val 中。 它會傳回迭代器,此迭代器指定貨幣輸入欄位後的第一個元素。 否則,函式會將空序列儲存在 val 中,並在 State 中設定 ios_base::failbit
。 它會傳回迭代器,此迭代器指定有效貨幣輸入欄位之任何前置詞後的第一個元素。 不論是上述哪一種情況,如果傳回值等於 last
,函式就會在 State
中設定 ios_base::eofbit
。
第二個虛擬受保護成員函式的行為與第一個函式相同,不同之處在於,如果成功,它會將選擇性帶正負號的數位序列轉換成 類型的long double
值,並將該值儲存在 val 中。
貨幣輸入欄位的格式是由有效呼叫use_facet<moneypunct<CharType, iosbase>> 所傳回的地區設定 Facetfac 所決定。 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 為非零,字串 fac。 curr_symbol
就必須在格式模式中與 money_base::symbol 相等之元素出現的位置進行比對。 否則,如果 money_base::symbol 出現在格式模式結尾,又如果沒有任何其餘正負號字串元素可供比對,就不會比對貨幣符號。 否則,會視需要比對貨幣符號。
如果沒有任何 fac. thousands_sep
執行個體出現在貨幣輸入欄位的值部分 (格式模式中與 money_base::value 相等之元素出現的位置),就不會施加任何千分號條件約束。 否則,將會強制執行 fac. grouping 所施加的任何千分號條件約束。 請注意,產生的數字序列代表一個整數,其低序位 fac. frac_digits
十進位數字被視為在小數點右邊。
在格式模式中與 money_base::space 相等之元素出現的位置,只要該元素不是出現在格式模式結尾,就會進行任意空白字元比對。 否則,不會比對任何內部空白字元。 如果use_facet<ctype<CharType>>(iosbase),元素 ch 就會被視為空格符。 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
輸入迭代器,定址對象是要轉換之序列的結尾。
國際
布爾值,表示序列中預期的貨幣符號類型: true
如果是國際, false
則為國內。
Iosbase
格式旗標,已設定時,表示貨幣符號為選用;否則,必須指定貨幣符號。
州 (縣/市)
根據作業是否成功,將適當的位元遮罩元素設定為資料流狀態。
val
儲存已轉換之序列的字串。
傳回值
輸入迭代器,定址對象是貨幣輸入欄位後的第一個元素。
備註
這兩個成員函式(first, last, Intl, Iosbase, State, val)
都會傳回do_get。
範例
// 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 參數的可能值及其重要性如下:
0:物件的存留期由包含該物件的地區設定來管理。
1:物件的存留期必須以手動方式管理。
> 1:未定義這些值。
無法提供任何直接範例,因為解構函式受到保護。
建構函式會使用 locale::facet(_Refs)初始化其基底物件。
money_get::string_type
類型,描述包含 CharType 類型字元的字串。
typedef basic_string<CharType, Traits, Allocator> string_type;
備註
此類型描述類別範本 的特製化basic_string。