std:: num_put
|
ヘッダーで定義
<locale>
|
||
|
template
<
class
CharT,
|
||
クラス
std::num_put
は、数値を文字列としてフォーマットするための規則をカプセル化します。具体的には、
bool
、
long
、
unsigned
long
、
long
long
、
unsigned
long
long
(C++11以降)
、
double
、
long
double
、
void
*
の型、およびこれらに暗黙的に変換可能なすべての型(
int
や
float
など)がサポートされています。標準のフォーマット出力演算子(例:
cout
<<
n
;
)は、数値のテキスト表現を生成するために、I/Oストリームのロケールの
std::num_put
ファセットを使用します。
継承図
std::num_put
の特殊化が標準ライブラリによって提供されることが保証されていない場合(下記参照)、その
put()
および
do_put()
の動作は指定通りに保証されません。
目次 |
特殊化
標準ライブラリは以下の特殊化を提供することが保証されています(これらは あらゆるロケールオブジェクトで実装が必須 とされています):
|
ヘッダーで定義
<locale>
|
|
| std :: num_put < char > | 数値のナロー文字列表現を生成 |
| std :: num_put < wchar_t > | 数値のワイド文字列表現を生成 |
さらに、標準ライブラリは以下の型要件を満たすすべての特殊化を提供することも保証されています:
-
CharTは以下のいずれかです- char 、
- wchar_t 、および
- その他の実装定義の 文字コンテナ型 ( iostreamコンポーネント のインスタンス化が可能な文字の要件を満たすもの)
-
OutputItは LegacyOutputIterator の要件を満たさなければなりません。
ネスト型
| 型 | 定義 |
char_type
|
CharT
|
iter_type
|
OutputIt
|
データメンバ
| メンバー | 説明 |
std::locale::id
id
[static]
|
facet の識別子 |
メンバー関数
新しい
num_put
ファセットを構築する
(public member function) |
|
do_put
を呼び出す
(public member function) |
プロテクテッドメンバー関数
num_put
ファセットを破棄する
(protected member function) |
|
|
[virtual]
|
数値をフォーマットして出力ストリームに書き込む
(virtual protected member function) |
例
#include <iostream> #include <iterator> #include <locale> #include <string> int main() { double n = 1234567.89; std::cout.imbue(std::locale("de_DE.UTF-8")); std::cout << "文字列への直接変換:\n" << std::to_string(n) << '\n' << "ドイツ語ロケールを使用した出力:\n" << std::fixed << n << '\n' << "アメリカ英語ロケールを使用した出力:\n"; // ファセットを直接使用 std::cout.imbue(std::locale("en_US.UTF-8")); auto& f = std::use_facet<std::num_put<char>>(std::cout.getloc()); f.put(std::ostreambuf_iterator<char>(std::cout), std::cout, ' ', n); std::cout << '\n'; }
出力例:
文字列への直接変換: 1234567.890000 ドイツ語ロケールを使用した出力: 1.234.567,890000 アメリカ英語ロケールを使用した出力: 1,234,567.890000
不具合報告
以下の動作変更の欠陥報告書は、以前に公開されたC++規格に対して遡及的に適用されました。
| DR | 適用対象 | 公開時の動作 | 正しい動作 |
|---|---|---|---|
| LWG 427 | C++98 |
num_put
はあらゆる
CharT
を受け入れることが保証されていた
(iostreamコンポーネントのインスタンス化が可能な 文字要件を満たすもの) |
char
、
wchar_t およびその他の実装定義の 文字型のみを受け入れることが保証される |
| LWG 2392 | C++98 |
文字型
CharT
のみが
num_put
による受け入れが保証されていた
|
実装定義の文字コンテナ型の
受け入れを保証できる |
関連項目
|
数値の区切り規則を定義する
(クラステンプレート) |
|
|
入力文字シーケンスから数値を解析する
(クラステンプレート) |
|
|
(C++11)
|
整数値または浮動小数点値を
string
に変換する
(関数) |
|
(C++11)
|
整数値または浮動小数点値を
wstring
に変換する
(関数) |