Namespaces
Variants

std::moneypunct<CharT,International>:: positive_sign, do_positive_sign, negative_sign, do_negative_sign

From cppreference.net
ヘッダー <locale> で定義
public :
string_type positive_sign ( ) const ;
(1)
public :
string_type negative_sign ( ) const ;
(2)
protected :
virtual string_type do_positive_sign ( ) const ;
(3)
protected :
virtual string_type do_negative_sign ( ) const ;
(4)
1) パブリックメンバー関数。最も派生したクラスのメンバー関数 do_positive_sign を呼び出します。
2) パブリックメンバー関数。最も派生したクラスのメンバー関数 do_negative_sign を呼び出します。
3) 正の通貨値の書式設定に使用される文字列を返します。
3) 負の通貨値の書式設定に使用される文字列を返します。

返される文字列の最初の文字のみが、 pos_format() / neg_format() で示される位置に表示される文字です。残りの文字は、通貨文字列の残りの部分の 後に 表示されます。

特に、negative_signが "-" の場合、書式は "-1.23 €" のように表示される可能性がありますが、negative_signが "()" の場合は "(1.23 €)" のように表示されます。

戻り値

string_type 型の文字列で、正符号または負符号として使用される文字を保持します。

#include <iomanip>
#include <iostream>
#include <locale>
struct my_punct : std::moneypunct_byname<char, false>
{
    my_punct(const char* name) : moneypunct_byname(name) {}
    string_type do_negative_sign() const { return "()"; }
};
int main()
{
    std::locale loc("de_DE.utf8");
    std::cout.imbue(loc);
    std::cout << loc.name() << " negative sign is '"
              << std::use_facet<std::moneypunct<char>>(loc).negative_sign()
              << "' for example: " << std::showbase << std::put_money(-1234) << '\n';
    std::locale loc2("ms_MY.utf8");
    std::cout.imbue(loc2);
    std::cout << loc2.name() << " negative sign is '"
              << std::use_facet<std::moneypunct<char>>(loc2).negative_sign()
              << "' for example: " << std::put_money(-1234) << '\n';
    std::cout.imbue(std::locale(std::cout.getloc(), new my_punct("de_DE.utf8")));
    std::cout << "de_DE.utf8 with negative_sign set to \"()\": "
              << std::put_money(-1234) << '\n';
}

出力:

de_DE.utf8 negative sign is '-' for example: -12,34 €
ms_MY.utf8 negative sign is '()' for example: (RM12.34)
de_DE.utf8 with negative_sign set to "()": (12,34 €)

関連項目

通貨値のフォーマットパターンを提供する
(仮想保護メンバー関数)