Skip to content

Commit a659a6b

Browse files
committed
formatter: 説明を追加
1 parent 194f60c commit a659a6b

File tree

1 file changed

+27
-24
lines changed

1 file changed

+27
-24
lines changed

reference/format/formatter.md

Lines changed: 27 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -44,28 +44,14 @@ namespace std {
4444
4545
(1)は、`charT`を`char`または`wchar_t`とすると、標準で以下の特殊化が利用できる。
4646
47-
- 1 以下のもの。
48-
```cpp
49-
template<> struct formatter<charT, charT>;
50-
51-
template<> struct formatter<char, wchar_t>;
52-
53-
template<> struct formatter<charT*, charT>;
54-
55-
template<> struct formatter<const charT*, charT>;
56-
57-
template<size_t N> struct formatter<const charT[N], charT>;
58-
59-
template<class traits, class Allocator>
60-
struct formatter<basic_string<charT, traits, Allocator>, charT>;
61-
62-
template<class traits>
63-
struct formatter<basic_string_view<charT, traits>, charT>;
64-
```
65-
* basic_string[link /reference/string/basic_string.md]
66-
* basic_string_view[link /reference/string_view/basic_string_view.md]
67-
68-
- 2 第1テンプレート引数が`nullptr_t`, `void*`, `const void*`, `bool`, すべてのCV修飾されない標準の整数型, 拡張整数型, 浮動小数点数型であり、第2テンプレート引数が`charT`であるもの。
47+
- `template<> struct formatter<charT, charT>`
48+
- `template<> struct formatter<char, wchar_t>`
49+
- `template<> struct formatter<charT*, charT>`
50+
- `template<> struct formatter<const charT*, charT>`
51+
- `template<size_t N> struct formatter<const charT[N], charT>`
52+
- `template<class traits, class Allocator> struct formatter<`[`basic_string`](/reference/string/basic_string.md)`<charT, traits, Allocator>, charT>`
53+
- `template<class traits> struct formatter<`[`basic_string_view`](/reference/string_view/basic_string_view.md)`<charT, traits>, charT>`
54+
- 第1テンプレート引数が`nullptr_t`, `void*`, `const void*`, `bool`, すべてのCV修飾されない標準の整数型, 拡張整数型, 浮動小数点数型であり、第2テンプレート引数が`charT`であるもの。
6955
7056
さらに、ユーザーが`formatter`を特殊化した場合、それも有効である。
7157
@@ -96,7 +82,7 @@ namespace std {
9682
- 出力は`u`、`fc.locale()`、最後に呼び出された`f.parse(pc)`のイテレータ範囲`[pc.begin(), pc.end())`以外に依存しない
9783
- `u`を変更しない
9884
99-
条件内の各要素を、以下のように定義する
85+
条件内の各要素を、以下のように定義する
10086
10187
- 文字の型を`charT`
10288
- 出力イテレータの型を`Out`
@@ -109,11 +95,28 @@ namespace std {
10995
- `FC`を[`basic_format_context`](basic_format_context.md)`<Out, charT>`
11096
- `pc`を`PC`のlvalue
11197
- `fc`を`FC`のlvalue
112-
- `pc.begin()`は書式文字列中の対応する置換フィールドのオプションの先頭を指す
98+
99+
ただし、[`parse`](formatter/parse.md)の呼び出し前の状態で、`pc.begin()`は書式文字列中の対応する置換フィールドのオプションの先頭を指す。
100+
101+
- オプションが空でなければ、`*pc.begin()`は`:`の次の文字
113102
- オプションが空なら、`pc.begin() == pc.end()`または`*pc.begin() == '}'`である
114103
115104
[`std::formattable`](/reference/format/formattable.md)コンセプトも参照。
116105
106+
フォーマッターは、書式文字列中に置換フィールドが見つかるたびに次のコードと近い形で呼び出される。
107+
108+
```cpp
109+
typename FC::template formatter_type<T> f;
110+
pc.advance_to(f.parse(pc)); // オプションを解析し状態を保存する
111+
fc.advance_to(f.format(u, fc)); // 状態をもとにフォーマットを行う
112+
assert(pc.begin() == pc.end() || *pc.begin() == '}');
113+
```
114+
* pc.advance_to[link /reference/format/basic_format_parse_context/advance_to.md]
115+
* fc.advance_to[link /reference/format/basic_format_context/advance_to.md]
116+
* f.parse[link formatter/parse.md]
117+
* f.format[link formatter/format.md]
118+
119+
[handle](/reference/format/basic_format_arg/handle.md)も参照。
117120

118121
## メンバ関数
119122

0 commit comments

Comments
 (0)