Share via


num_put クラス

数値から CharType 型のシーケンスへの変換を制御するためにロケール ファセットとして使用できるオブジェクトを表すクラス テンプレート。

構文

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

パラメーター

CharType
ロケールの文字をエンコードするためにプログラム内で使用される型。

OutputIterator
数値 put 関数が出力を書き込む反復子の型。

解説

すべてのロケールのファセットと同様、静的オブジェクト ID に最初に格納されている値は 0 です。 格納されている値に初めてアクセスしようとすると、id に一意の正の値が格納されます。

コンストラクター

コンストラクター 説明
num_put num_put 型のオブジェクトのコンストラクター。

Typedefs

型名 説明
char_type ロケールによって使用される文字を表すために使用される型。
iter_type 出力反復子を表す型。

メンバー関数

メンバー関数 説明
do_put 数値を、特定のロケールで書式設定された数値を表す CharType のシーケンスに変換するために呼び出される仮想関数。
put 数値を、特定のロケールで書式設定された数値を表す CharType のシーケンスに変換します。

要件

ヘッダー:<locale>

名前空間: std

num_put::char_type

ロケールによって使用される文字を表すために使用される型。

typedef CharType char_type;

解説

この型は、テンプレート パラメーター CharTypeのシノニムです。

num_put::d o_put

数値を、特定のロケールで書式設定された数値を表す CharType のシーケンスに変換するために呼び出される仮想関数。

virtual iter_type do_put(
    iter_type dest,
    ios_base& _Iosbase,
    _Elem _Fill,
    bool val) const;

virtual iter_type do_put(
    iter_type dest,
    ios_base& _Iosbase,
    _Elem _Fill,
    long val) const;

virtual iter_type do_put(
    iter_type dest,
    ios_base& _Iosbase,
    _Elem _Fill,
    unsigned long val) const;

virtual iter_type do_put(
    iter_type dest,
    ios_base& _Iosbase,
    _Elem _Fill,
    double val) const;

virtual iter_type do_put(
    iter_type dest,
    ios_base& _Iosbase,
    _Elem _Fill,
    long double val) const;

virtual iter_type do_put(
    iter_type dest,
    ios_base& _Iosbase,
    _Elem _Fill,
    const void* val) const;

virtual iter_type do_put(
    iter_type dest,
    ios_base& _Iosbase,
    _Elem _Fill,
    const long long val) const;

virtual iter_type do_put(
    iter_type dest,
    ios_base& _Iosbase,
    _Elem _Fill,
    const unsigned long long val) const;

パラメーター

next
挿入された文字列の先頭の要素を示す反復子。

_Iosbase
出力に句読点を付けるために使用される numpunct ファセットを持つロケールおよび出力を書式設定するためのフラグを含むストリームを指定します。

_Fill
スペースに使用される文字。

val
出力する数値またはブール型。

戻り値

生成される最後の要素を 1 つ超える位置を示す出力反復子。

解説

1 番目のプロテクト仮想メンバー関数は、next 以降の連続した要素を生成し、val の値から整数出力フィールドを生成します。 関数は、生成された出力フィールドを超える、次に要素を挿入する場所を指定する反復子を返します。

整数出力フィールドは、一連の char 要素をファイルに生成するために出力関数によって使用されるルールと同じルールで生成されます。 このような char 要素は、単純な一対一のマッピングで CharType 型の同等の要素にマップされると想定されます。 出力関数はフィールドを埋めるのにスペースと数字の 0 のいずれかを使用しますが、do_put は代わりに fill を使用します。 同等の出力変換仕様は次のように決定されます。

  • iosbase. flags & ios_base::basefield == ios_base::oct、変換仕様は .lo

  • iosbase.flags & ios_base::basefield == ios_base::hex の場合、変換の仕様は .lx

  • それ以外の場合、変換仕様は ld です。

iosbase. width が 0 以外の場合、この値のフィールド幅が先頭に付加されます。 その後、この関数は iosbase を呼び出しますwidth(0) を呼び出して、フィールド幅をゼロにリセットします。

パディングは、出力フィールドを指定するために必要な要素 N の最小数が iosbase 未満 の場合にのみ発生します。 このような埋め込みは、fillN - width コピーのシーケンスで構成されます。 この場合、埋め込みは次のように発生します。

  • iosbase. flags > ios_base::adjustfield == ios_base::を指定すると、フラグの先頭にフラグ-が付加されます。 (埋め込みは、生成されたテキストの後に発生します。)

  • iosbase.flags &ios_base::adjustfield == ios_base::internal の場合、フラグ 0 が先頭に付加されます。 (数値出力フィールド場合、埋め込みは、出力関数が 0 で埋め込む状況でのみ発生します。)

  • それ以外の場合、追加のフラグは先頭に付加されません。 (埋め込みは、生成されたシーケンスの前に発生します。)

最後に、次の操作を行います。

  • iosbase. flags & ios_base::showpos が 0 以外の場合、フラグ + は変換仕様の前に付加されます。

  • iosbase. flags & ios_base::showbase は 0 以外で、フラグ # は変換仕様の前に付加されます。

整数出力フィールドの形式は、numpunct<Elem>( iosbase) use_facet<呼び出しによって返されるロケール ファセットfac によってさらに決定されます。 getloc)。 具体的には、次のように使用します。

  • fac. グループ化 は、小数点の左側に数字をグループ化する方法を決定します

  • fac. thousands_sepは、小数点の左側にある数字のグループを区切るシーケンスを決定します

グループ化の制約が fac. グループ化 (その最初の要素には値CHAR_MAXがあります)、その後、facインスタンスはありません。 thousands_sep は出力フィールドに生成されます。 それ以外の場合、出力変換が発生した後に区切り記号が挿入されます。

2 番目のプロテクト仮想メンバー関数:

virtual iter_type do_put(iter_type next,
    ios_base& _Iosbase,
    CharType _Fill,
    unsigned long val) const;

この関数の動作は 1 番目と同じですが、ld の変換仕様を lu に置き換えている点が異なります。

3 番目のプロテクト仮想メンバー関数:

virtual iter_type do_put(iter_type next,
    ios_base& _Iosbase,
    CharType _Fill,
    double val) const;

この関数の動作は 1 番目と同じですが、val の値から浮動小数点出力フィールドを生成している点が異なります。 fac. decimal_point は、整数桁と小数桁を区切るシーケンスを決定します。 同等の出力変換仕様は次のように決定されます。

  • iosbase. flags & ios_base::floatfield == ios_base::fixed、変換仕様は .lf

  • iosbase. flags & ios_base::floatfieldios_base:: == scientific, the conversion specification is .le iosbase. flags > ios_base::大文字 は 0 以外で、 e 次のように E置き換えられます。

  • それ以外の場合、変換仕様は lg です。 iosbase. flags & ios_base::大文字 は 0 以外で、 g 次のように置き換 Gえられます。

iosbase. flags & ios_base::fixed は 0 以外または iosbase の場合です。 precision は 0 より大きく、値 iosbase の有効桁数です精度 は変換仕様の前に付加されます。 埋め込みの動作は整数出力フィールドの場合と同様です。 埋め込み文字は fill です。 最後に、次の操作を行います。

  • iosbase. flags & ios_base::showpos が 0 以外の場合、フラグ + は変換仕様の前に付加されます。

  • iosbase. flags & ios_base::showpoint が 0 以外の場合、フラグ # は変換仕様の前に付加されます。

4 番目のプロテクト仮想メンバー関数:

virtual iter_type do_put(iter_type next,
    ios_base& _Iosbase,
    CharType _Fill,
    long double val) const;

この関数の動作は 3 番目と同じですが、変換仕様内の修飾子 lL に置き換えられている点が異なります。

5 番目のプロテクト仮想メンバー関数:

virtual iter_type do_put(iter_type next,
    ios_base& _Iosbase,
    CharType _Fill,
    const void* val) const;

この関数の動作は 1 番目と同じですが、変換仕様が p埋め込みを指定するために必要なすべての修飾子である点が異なります。

6 番目のプロテクト仮想メンバー関数:

virtual iter_type do_put(iter_type next,
    ios_base& _Iosbase,
    CharType _Fill,
    bool val) const;

この関数の動作は 1 番目と同じですが、val からブール値出力フィールドを生成している点が異なります。

ブール値出力フィールドは、次の 2 つの形式のいずれかになります。 iosbase.flags & ios_base::boolalphafalse の場合、メンバー関数は do_put(_Next, _Iosbase, _Fill, (long)val) を返します。これは通常、0 (false の場合) または 1 (true の場合) のいずれかの生成されたシーケンスを生成します。 それ以外の場合、生成されるシーケンスは、fac.falsename (false の場合) と fac.truename (true の場合) のいずれかになります。

7 番目のプロテクト仮想メンバー関数:

virtual iter_type do_put(iter_type next,
    ios_base& iosbase,
    Elem fill,
    long long val) const;

この関数の動作は 1 番目と同じですが、ld の変換仕様を lld に置き換えている点が異なります。

8 番目のプロテクト仮想メンバー関数:

virtual iter_type do_put(iter_type next,
    ios_base& iosbase,
    Elem fill,
    unsigned long long val) const;

この関数の動作は 1 番目と同じですが、ld の変換仕様を llu に置き換えている点が異なります。

put の例 (do_put を呼び出す) を参照してください。

num_put::iter_type

出力反復子を表す型。

typedef OutputIterator iter_type;

解説

この型は、テンプレート パラメーター OutputIterator のシノニムです。

num_put::num_put

num_put 型のオブジェクトのコンストラクター。

explicit num_put(size_t _Refs = 0);

パラメーター

_Refs
オブジェクトのメモリ管理の種類を指定するために使用する整数値。

解説

_Refs パラメーターの可能な値とその重要性は次のとおりです。

  • 0: オブジェクトの有効期間はそれが含まれるロケールによって管理されます。

  • 1: オブジェクトの有効期間を手動で管理する必要があります。

  • > 1: これらの値は定義されていません。

デストラクターが保護されているため、利用できる直接的な例はありません。

コンストラクターは、locale::facet(_ Refs) を使用して、その基本オブジェクトを初期化します。

num_put::p ut

数値を、特定のロケールで書式設定された数値を表す CharType のシーケンスに変換します。

iter_type put(
    iter_type dest,
    ios_base& _Iosbase,
    _Elem _Fill,
    bool val) const;

iter_type put(
    iter_type dest,
    ios_base& _Iosbase,
    _Elem _Fill,
    long val) const;

iter_type put(
    iter_type dest,
    ios_base& _Iosbase,
    _Elem _Fill,
    unsigned long val) const;

iter_type put(
    iter_type dest,
    ios_base& _Iosbase,
    _Elem _Fill,
    Long long val) const;

iter_type put(
    iter_type dest,
    ios_base& _Iosbase,
    _Elem _Fill,
    Unsigned long long val) const;

iter_type put(
    iter_type dest,
    ios_base& _Iosbase,
    _Elem _Fill,
    double val) const;

iter_type put(
    iter_type dest,
    ios_base& _Iosbase,
    _Elem _Fill,
    long double val) const;

iter_type put(
    iter_type dest,
    ios_base& _Iosbase,
    _Elem _Fill,
    const void* val) const;

パラメーター

dest
挿入された文字列の先頭の要素を示す反復子。

_Iosbase
出力に句読点を付けるために使用される numpunct ファセットを持つロケールおよび出力を書式設定するためのフラグを含むストリームを指定します。

_Fill
スペースに使用される文字。

val
出力する数値またはブール型。

戻り値

生成される最後の要素を 1 つ超える位置を示す出力反復子。

解説

すべてのメンバー関数が do_put( next, _Iosbase, _Fill, val) を返します。

// num_put_put.cpp
// compile with: /EHsc
#include <locale>
#include <iostream>
#include <sstream>
using namespace std;
int main( )
{
   locale loc( "german_germany" );
   basic_stringstream<char> psz2;
   ios_base::iostate st = 0;
   long double fVal;
   cout << "The thousands separator is: "
        << use_facet < numpunct <char> >(loc).thousands_sep( )
        << endl;

   psz2.imbue( loc );
   use_facet < num_put < char > >
      ( loc ).put(basic_ostream<char>::_Iter(psz2.rdbuf( ) ),
                    psz2, ' ', fVal=1000.67);

   if ( st & ios_base::failbit )
      cout << "num_put( ) FAILED" << endl;
   else
      cout << "num_put( ) = " << psz2.rdbuf( )->str( ) << endl;
}
The thousands separator is: .
num_put( ) = 1.000,67

関連項目

<locale>
facet クラス
C++ 標準ライブラリ内のスレッド セーフ