|
VMS Help CXXLSTD, locales, moneypunct_byname *Conan The Librarian |
Standard C++ Library
Copyright 1996, Rogue Wave Software, Inc.
NAME
moneypunct, moneypunct_byname - Monetary punctuation facets.
SYNOPSIS
#include <locale>
class money_base;
template <class charT, bool International = false>
class moneypunct;
DESCRIPTION
The moneypunct facets provide formatting specifications and
punctuation character for monetary values. The moneypunct facet
provides punctuation based on the "C" locale, while the
moneypunct_byname facet provides the same facilities for named
locales.
The facet is used by money_put for outputting formatted
representations of monetary values and by money_get for reading
these strings back in.
money_base provides a structure, pattern, that specifies the order
of syntactic elements in a monetary value and enumeration
values representing those elements. The pattern struct provides
a simple array of characters, field. Each index in field
is taken up by an enumeration value indicating the location of a
syntactic element. The enumeration values are described below:
Format Flag Meaning
none No grouping seperator
space Use space for grouping seperator
symbol Currency symbol
sign Sign of monetary value
value The monetary value itself
The do_pos_format an do_neg_format member functions of moneypunct
both return the pattern type. See the description of these
functions for further elaboration.
INTERFACE
class money_base {
public:
enum part { none, space, symbol, sign, value };
struct pattern { char field[4]; };
};
template <class charT, bool International = false>
class moneypunct : public locale::facet, public money_base {
public:
typedef charT char_type;
typedef basic_string<charT> string_type;
explicit moneypunct(size_t = 0);
charT decimal_point() const;
charT thousands_sep() const;
string grouping() const;
string_type curr_symbol() const;
string_type positive_sign() const;
string_type negative_sign() const;
int frac_digits() const;
pattern pos_format() const;
pattern neg_format() const;
static locale::id id;
static const bool intl = International;
protected:
~moneypunct(); // virtual
virtual charT do_decimal_point() const;
virtual charT do_thousands_sep() const;
virtual string do_grouping() const;
virtual string_type do_curr_symbol() const;
virtual string_type do_positive_sign() const;
virtual string_type do_negative_sign() const;
virtual int do_frac_digits() const;
virtual pattern do_pos_format() const;
virtual pattern do_neg_format() const;
};
template <class charT, bool Intl = false>
class moneypunct_byname : public moneypunct<charT, Intl> {
public:
explicit moneypunct_byname(const char*, size_t = 0);
protected:
~moneypunct_byname(); // virtual
virtual charT do_decimal_point() const;
virtual charT do_thousands_sep() const;
virtual string do_grouping() const;
virtual string_type do_curr_symbol() const;
virtual string_type do_positive_sign() const;
virtual string_type do_negative_sign() const;
virtual int do_frac_digits() const;
virtual pattern do_pos_format() const;
virtual pattern do_neg_format() const;
};
TYPES
char_type
Type of character the facet is instantiated on.
string_type
Type of character string returned by member functions.
CONSTRUCTORS AND DESTRUCTORS
explicit moneypunct(size_t refs = 0)
Constructs a moneypunct facet. If the refs argument is 0 then
destruction of the object is delegated to the locale, or
locales, containing it. This allows the user to ignore
lifetime management issues. On the other hand, if refs is 1
then the object must be explicitly deleted; the locale will not
do so. In this case, the object can be maintained across the
lifetime of multiple locales.
explicit moneypunct_byname(const char* name, size_t refs = 0);
Constructs a moneypunct_byname facet. Uses the named locale
specified by the name argument. The refs argument serves
the same purpose as it does for the moneypunct constructor.
~moneypunct(); // virtual and protected
Destroy the facet
STATIC MEMBERS
static locale::id id;
Unique identifier for this type of facet.
static const bool intl = Intl;
true if international representation, false otherwise.
PUBLIC MEMBER FUNCTIONS
The public members of the moneypunct and moneypunct_byname facets
provide an interface to protected members. Each public member xxx
has a corresponding virtual protected member do_xxx. All work is
delagated to these protected members. For instance, the
long version of the public decimal_point function simply calls
its protected cousin do_decimal_point.
string_type curr_symbol() const;
charT decimal_point() const;
int frac_digits() const;
string grouping() const;
pattern neg_format() const;
string_type negative_sign() const;
pattern pos_format() const;
string_type positive_sign() const;
charT thousands_sep() const;
Each of these public member functions xxx simply calls the
corresponding protected do_xxx function.
PROTECTED MEMBER FUNCTIONS
virtual string_type
do_curr_symbol() const;
Returns a string to use as the currency symbol.
virtual charT
do_decimal_point() const;
Returns the radix separator to use if fractional digits are
allowed (see do_frac_digits).
virtual int
do_frac_digits() const;
Returns the number of digits in the fractional part of the
monetary representation.
virtual string
do_grouping() const;
Returns a string in which each character is used as an integer
value to represent the number of digits in a particular grouping,
starting with the rightmost group. A group is simply the digits
between adjacent thousands' separators. Each group at a
position larger than the size of the string gets the same
value as the last element in the string. If a value is less
than or equal to zero, or equal to CHAR_MAX, then the size
of that group is unlimited. moneypunct returns an empty
string, indicating no grouping.
virtual string_type
do_negative_sign() const;
A string to use as the negative sign. The first character of
this string will be placed in the position indicated by the
format pattern (see do_neg_format); the rest of the characters,
if any, will be placed after all other parts of the monetary
value.
virtual pattern
do_neg_format() const;
virtual pattern
do_pos_format() const;
Returns a pattern object specifying the location of the various
syntactic elements in a monetary representation. The
enumeration values symbol, sign, and value will appear exactly
once in this pattern, with the remaining location taken by
either none or space. none will never occupy the first
position in the pattern and space will never occupy the first or
the last position. Beyond these restrictions, elements may
appear in any order. moneypunct returns {symbol, sign, none,
value}.
virtual string_type
do_positive_sign() const;
A string to use as the positive sign. The first character of
this string will be placed in the position indicated by the
format pattern (see do_pos_format); the rest of the characters,
if any, will be placed after all other parts of the monetary
value.
virtual charT
do_thousands_sep() const;
Reurns the grouping seperator if grouping is allowed (see
do_grouping).
EXAMPLE
//
// moneypun.cpp
//
#include <string>
#include <iostream>
int main ()
{
using namespace std;
locale loc;
// Get a moneypunct facet
const moneypunct<char,false>& mp =
#ifndef _RWSTD_NO_TEMPLATE_ON_RETURN_TYPE
use_facet<moneypunct<char,false> >(loc);
#else
use_facet(loc,(moneypunct<char,false>*)0);
#endif
cout << "Decimal point = "
<< mp.decimal_point() << endl;
cout << "Thousands seperator = "
<< mp.thousands_sep() << endl;
cout << "Currency symbol = "
<< mp.curr_symbol() << endl;
cout << "Negative Sign = "
<< mp.negative_sign() << endl;
cout << "Digits after decimal = "
<< mp.frac_digits() << endl;
return 0;
}
SEE ALSO
locale, facets, money_put, money_get
STANDARDS CONFORMANCE
ANSI X3J16/ISO WG21 Joint C++ Committee
|
|