money_put Class
The latest version of this topic can be found at money_put Class.
The template class describes an object that can serve as a locale facet to control conversions of monetary values to sequences of type CharType
.
Syntax
template <class CharType,
class OutputIterator = ostreambuf_iterator<CharType>>
class money_put : public locale::facet;
Parameters
CharType
The type used within a program to encode characters in a locale.
OutputIterator
The type of iterator to which the monetary put functions write their output.
Remarks
As with any locale facet, the static object ID has an initial stored value of zero. The first attempt to access its stored value stores a unique positive value in id.
Constructors
money_put | The constructor for objects of type money_put . |
Typedefs
char_type | A type that is used to describe a character used by a locale. |
iter_type | A type that describes an output iterator. |
string_type | A type that describes a string containing characters of type CharType . |
Member Functions
do_put | A virtual function called to convert either number or a string to a character sequence that represents a monetary value. |
put | Converts either number or a string to a character sequence that represents a monetary value. |
Requirements
Header: <locale>
Namespace: std
money_put::char_type
A type that is used to describe a character used by a locale.
typedef CharType char_type;
Remarks
The type is a synonym for the template parameter CharType.
money_put::do_put
A virtual function called to convert either number or a string to a character sequence that represents a monetary value.
virtual iter_type do_put(
iter_type next,
bool _Intl,
ios_base& _Iosbase,
CharType _Fill,
const string_type& val) const;
virtual iter_type do_put(
iter_type next,
bool _Intl,
ios_base& _Iosbase,
CharType _Fill,
long double val) const;
Parameters
next
An iterator addressing the first element of the inserted string.
_Intl
A Boolean value indicating the type of currency symbol expected in the sequence: true if international, false if domestic.
_Iosbase
A format flag which when set indicates that the currency symbol is optional; otherwise, it is required
_Fill
A character which is used for spacing.
val
A string object to be converted.
Return Value
An output iterator the addresses the position one beyond the last element produced.
Remarks
The first virtual protected member function generates sequential elements beginning at next
to produce a monetary output field from the string_type object val
. The sequence controlled by val
must begin with one or more decimal digits, optionally preceded by a minus sign (–), which represents the amount. The function returns an iterator designating the first element beyond the generated monetary output field.
The second virtual protected member function behaves the same as the first, except that it effectively first converts val
to a sequence of decimal digits, optionally preceded by a minus sign, then converts that sequence as above.
The format of a monetary output field is determined by the locale facet fac returned by the (effective) call use_facet < moneypunct< CharType, intl> >( iosbase. getloc).
Specifically:
fac. pos_format determines the order in which components of the field are generated for a nonnegative value.
fac. neg_format determines the order in which components of the field are generated for a negative value.
fac. curr_symbol determines the sequence of elements to generate for a currency symbol.
fac. positive_sign determines the sequence of elements to generate for a positive sign.
fac. negative_sign determines the sequence of elements to generate for a negative sign.
fac. grouping determines how digits are grouped to the left of any decimal point.
fac. thousands_sep determines the element that separates groups of digits to the left of any decimal point.
fac. decimal_point determines the element that separates the integer digits from any fraction digits.
fac. frac_digits determines the number of significant fraction digits to the right of any decimal point.
If the sign string ( fac. negative_sign
or fac. positive_sign
) has more than one element, only the first element is generated where the element equal to money_base::sign appears in the format pattern ( fac. neg_format
or fac. pos_format
). Any remaining elements are generated at the end of the monetary output field.
If iosbase. flags & showbase is nonzero, the string fac. curr_symbol
is generated where the element equal to money_base::symbol appears in the format pattern. Otherwise, no currency symbol is generated.
If no grouping constraints are imposed by fac. grouping (its first element has the value CHAR_MAX), then no instances of fac. thousands_sep
are generated in the value portion of the monetary output field (where the element equal to money_base::value appears in the format pattern). If fac. frac_digits
is zero, then no instance of fac. decimal_point
is generated after the decimal digits. Otherwise, the resulting monetary output field places the low-order fac. frac_digits
decimal digits to the right of the decimal point.
Padding occurs as for any numeric output field, except that if iosbase. flags & iosbase. internal is nonzero, any internal padding is generated where the element equal to money_base::space appears in the format pattern, if it does appear. Otherwise, internal padding occurs before the generated sequence. The padding character is fill.
The function calls iosbase. width(0) to reset the field width to zero.
Example
See the example for put, where the virtual member function is called by put.
money_put::iter_type
A type that describes an output iterator.
typedef OutputIterator iter_type;
Remarks
The type is a synonym for the template parameter OutputIterator.
money_put::money_put
The constructor for objects of type money_put
.
explicit money_put(size_t _Refs = 0);
Parameters
_Refs
Integer value used to specify the type of memory management for the object.
Remarks
The possible values for the _Refs
parameter and their significance are:
0: the lifetime of the object is managed by the locales that contain it.
1: the lifetime of the object must be manually managed.
> 0: these values are not defined.
No direct examples are possible, because the destructor is protected.
The constructor initializes its base object with locale::facet( _Refs
).
money_put::put
Converts either number or a string to a character sequence that represents a monetary value.
iter_type put(
iter_type next,
bool _Intl,
ios_base& _Iosbase,
CharType _Fill,
const string_type& val) const;
iter_type put(
iter_type next,
bool _Intl,
ios_base& _Iosbase,
CharType _Fill,
long double val) const;
Parameters
next
An iterator addressing the first element of the inserted string.
_Intl
A Boolean value indicating the type of currency symbol expected in the sequence: true if international, false if domestic.
_Iosbase
A format flag which when set indicates that the currency symbol is optional; otherwise, it is required
_Fill
A character which is used for spacing.
val
A string object to be converted.
Return Value
An output iterator the addresses the position one beyond the last element produced.
Remarks
Both member functions return do_put( next
, _Intl
, _Iosbase
, _Fill
, val
).
Example
// money_put_put.cpp
// compile with: /EHsc
#include <locale>
#include <iostream>
#include <sstream>
using namespace std;
int main( )
{
// locale loc( "german_germany" );
locale loc( "english_canada" );
basic_stringstream<char> psz, psz2;
ios_base::iostate st = 0;
psz2.imbue( loc );
psz2.flags( psz2.flags( )|ios_base::showbase ); // force the printing of the currency symbol
use_facet < money_put < char > >(loc).put(basic_ostream<char>::_Iter( psz2.rdbuf( ) ), true, psz2, st, 100012);
if (st & ios_base::failbit)
cout << "money_put( ) FAILED" << endl;
else
cout << "money_put( ) = \"" << psz2.rdbuf( )->str( ) <<"\""<< endl;
st = 0;
};
money_put
( ) = "CAD1,000.12"
money_put::string_type
A type that describes a string containing characters of type CharType.
typedef basic_string<CharType, Traits, Allocator> string_type;
Remarks
The type describes a specialization of template class basic_string whose objects can store sequences of elements from the source sequence.
See Also
<locale>
facet Class
Thread Safety in the C++ Standard Library