money_put 类

此类模板描述一个对象来充当区域设置 facet,以便控制货币值向 CharType 类型序列的转换。

语法

template <class CharType,
    class OutputIterator = ostreambuf_iterator<CharType>>
class money_put : public locale::facet;

参数

CharType
在程序中用于对区域设置中的字符进行编码的类型。

OutputIterator
供货币放置函数写入其输出结果的迭代器类型。

备注

对于任何区域设置 facet,静态对象 ID 的初始存储值为零。 首次尝试访问其存储值后,将在 ID 中存储唯一正值。

构造函数

构造函数 说明
money_put money_put 类型的对象的构造函数。

Typedef

类型名称 说明
char_type 一种类型,此类型用于描述区域设置使用的字符。
iter_type 一种类型,此类型描述输出迭代器。
string_type 一种类型,此类型描述包含 CharType 类型字符的字符串。

成员函数

成员函数 说明
do_put 一种虚拟函数,通过调用此函数可将数字或字符串转换为表示货币值的字符序列。
put 将数字或字符串转换为表示货币值的字符序列。

要求

标头:<locale>

命名空间: std

money_put::char_type

一种类型,此类型用于描述区域设置使用的字符。

typedef CharType char_type;

备注

该类型是模板参数 CharType 的同义词。

money_put::do_put

一种虚拟函数,通过调用此函数可将数字或字符串转换为表示货币值的字符序列。

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;

参数

下一步
发现插入的字符串中第一个元素的迭代器。

_Intl
一个布尔值,该值指示在序列中预期的货币符号的类型:如果为国际,则为 true,如果为国内,则为 false

_Iosbase
一种格式标志,设定时表示货币符号是可选项;否则,它是必需项

_Fill
用于调整间距的字符。

val
要转换的字符串对象。

返回值

发现超出生成的最后一个元素的位置的输出迭代器。

注解

第一个受保护的虚拟成员函数生成以 next 开始的连续元素,以便从 string_type 对象 val 生成货币输出字段。 val 控制的序列必须以一个或多个十进制数字开始(数字前面可带负号 (-)),以表示数额。 该函数返回一个迭代器,指定超出生成货币输出字段的第一个元素。

第二个受保护的虚拟成员函数的行为与第一个相同,只不过它实际上首先将 val 转换为十进制数字序列(数字前可带有负号),然后按上述方式转换该序列。

货币输出字段的格式由区域设置 facet fac 决定,而后者又由(有效)调用 use_facet<moneypunct<CharType, intl>>( iosbase. getloc)。

具体而言:

  • fac. pos_format 确定生成非负数值的字段组件所采用的顺序。

  • fac. neg_format 确定生成负数值的字段组件所采用的顺序。

  • fac. curr_symbol 确定要生成的货币符号的元素序列。

  • fac. positive_sign 确定要生成的正号的元素序列。

  • fac. negative_sign 确定要生成的负号的元素序列。

  • fac. grouping 确定如何对任何小数点左侧的数字进行分组。

  • fac. thousands_sep 确定将任何小数点左侧的数字进行分组的元素。

  • fac. decimal_point 确定从任何小数位分隔整数位的元素。

  • fac. frac_digits 确定任何小数点右侧的有效位数。

如果符号字符串(fac. negative_signfac. positive_sign)具有多个元素,则第一个元素会在等于 money_base::sign 的元素在格式模式(fac. neg_formatfac. pos_format)中出现的位置处生成。 剩余所有元素在货币输出字段的末尾生成。

如果 iosbase. flags & showbase 不为零,为字符串 faccurr_symbol 将在等于 money_base::symbol 的元素在此格式模式中出现的位置处生成。 否则,将不生成货币符号。

如果 fac. grouping 未采用任何分组约束(其首个元素具有值 CHAR_MAX),则 fac. thousands_sep 的任何实例都不会在货币输出字段的值部分(等于 money_base::value 的元素在格式模式中出现的位置)生成。 如果 fac. frac_digits 为零,则在十进制数字后不会生成 fac. decimal_point 的任何实例。 否则,生成的货币输出字段会将低位 fac. frac_digits 十进制数字置于小数点右侧。

对于任何数字输出字段,都会发生填充,除非 iosbase. flags & iosbaseinternal 不为零;将在等于 money_base::space 的元素在此格式模式中出现的位置处生成任何内部填充(如果确实出现该元素)。 否则,将在生成的序列之前出现内部填充。 填充字符为 fill

该函数将调用 iosbase. width(0) 以便将字段宽度重置为零。

示例

请参阅 put 的示例,其中虚拟成员函数由 put 调用。

money_put::iter_type

一种类型,此类型描述输出迭代器。

typedef OutputIterator iter_type;

备注

该类型是模板参数 OutputIterator 的同义词。

money_put::money_put

money_put 类型的对象的构造函数。

explicit money_put(size_t _Refs = 0);

参数

_Refs
用于指定对象的内存管理类型的整数值。

备注

_Refs 参数可能的值及其含义

  • 0:对象的生存期由包含该对象的区域设置管理。

  • 1:必须手动管理对象的生存期。

  • > 1:未定义这些值。

由于该析构函数受到保护,可能没有直接的示例。

构造函数通过 locale::facet( _Refs) 初始化其基对象。

money_put::put

将数字或字符串转换为表示货币值的字符序列。

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;

参数

下一步
发现插入的字符串中第一个元素的迭代器。

_Intl
一个布尔值,该值指示在序列中预期的货币符号的类型:如果为国际,则为 true,如果为国内,则为 false

_Iosbase
一种格式标志,设定时表示货币符号是可选项;否则,它是必需项

_Fill
用于调整间距的字符。

val
要转换的字符串对象。

返回值

发现超出生成的最后一个元素的位置的输出迭代器。

备注

两个成员函数都返回 do_put( next, _Intl, _Iosbase, _Fill, val)。

示例

// money_put_put.cpp
// compile with: /EHsc
#include <locale>
#include <iostream>
#include <sstream>

int main()
{
    std::locale loc( "german_germany" );
    std::basic_stringstream<char> psz;

    psz.imbue(loc);
    psz.flags(psz.flags() | std::ios_base::showbase); // force the printing of the currency symbol
    std::use_facet<std::money_put<char> >(loc).put(std::basic_ostream<char>::_Iter(psz.rdbuf()), true, psz, ' ', 100012);
    if (psz.fail())
        std::cout << "money_put() FAILED" << std::endl;
    else
        std::cout << "money_put() = \"" << psz.rdbuf()->str() << "\"" << std::endl;
}
money_put() = "EUR1.000,12"

money_put::string_type

一种类型,此类型描述包含 CharType 类型字符的字符串。

typedef basic_string<CharType, Traits, Allocator> string_type;

备注

此类型描述 basic_string 类模板的专用化,该模板类的对象可存储来自源序列的元素序列。

另请参阅

<区域设置>
facet 类
C++ 标准库中的线程安全