std::money_get
От: Bugs Беларусь  
Дата: 08.11.04 12:08
Оценка:
Помогите плиз, нету больше сил...

class ccur : public std::moneypunct<TCHAR>{
mutable TCHAR buf[20];
public:
explicit ccur(size_t _Refs = 0)
: std::moneypunct<TCHAR>(_Refs) {}

protected:
virtual TCHAR do_decimal_point() const {return ',';}
virtual TCHAR do_thousands_sep() const {return ' ';}
virtual std::string do_grouping() const{ return "\3";}
virtual std::string do_curr_symbol() const { return "s";}
virtual std::string do_positive_sign() const { return "+";}
virtual std::string do_negative_sign() const { return "-";}
virtual int do_frac_digits() const { return 2;}
virtual pattern do_pos_format( ) const{ pattern pat;
pat.field[0]=sign;
pat.field[1]=space;
pat.field[2]=value;
pat.field[3]=symbol;
return pat;}

virtual pattern do_neg_format( ) const{ pattern pat;
pat.field[0]=sign;
pat.field[1]=space;
pat.field[2]=value;
pat.field[3]=symbol;
return pat;}
};


locale loc = std::_ADDFAC(std::locale(), new ccur());
ostringstream str;
stringstream istr;
str.imbue(loc);
istr.imbue(loc);
str.flags( str.flags( )|ios_base::showbase | ios::showpoint | ios::showpos);
istr.flags( istr.flags( )|ios_base::showbase | ios::showpoint | ios::showpos);

const money_put<char>& t = _USE(loc,money_put<char>);
const money_get<char>& g = _USE(loc,money_get<char>);
ostreambuf_iterator<char> junk (str);
istreambuf_iterator<char> inst (istr);
string s;

basic_stringstream< char > psz;
psz.imbue(loc);
psz.flags(ios_base::showbase | ios::showpoint | ios::showpos);


psz<<"-1 235 000,11s" << endl;

int A = 0;

long double val_d;


g.get( basic_istream<char>::_Iter (psz.rdbuf()),
basic_istream<char>::_Iter(0),
false,
psz,
A,
val_d);

Загвостка в том, что если psz<<"-1 235 000,11s" << endl; — работать не будет, будет выдоваться ошибка в A — failbit, если
psz<<"-1 235 000 000,11s" << endl; — то все ок... т.е. get() работает только в том случае если я завожу четное количество групп цифр, если не четное, то failbit..
В чем трабл?! помогите...
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.