|
68 | 68 |
|
69 | 69 | </head>
|
70 | 70 | <body>
|
71 |
| -<header data-kunai-mdinfo="{"meta": {"header": ["format"], "id-type": ["class template"], "namespace": ["std"], "cpp": ["cpp20"]}, "sources": [{"id": "f0f1f0a4ab5ebbae12a3bb9c2578b97179eb8305", "source": "#include <iostream>\n#include <format>\n\nenum color { red, green, blue };\n\nconst char* color_names[] = { \"red\", \"green\", \"blue\" };\n\ntemplate<>\nstruct std::formatter<color> : std::formatter<const char*> {\n auto format(color c, std::format_context& ctx) const {\n return std::formatter<const char*>::format(color_names[c], ctx);\n }\n};\n\nint main()\n{\n std::cout << std::format(\"{}\", red) << std::endl;\n}\n"}, {"id": "795293b1e8ac834d0cb3e053df1bcc3f84ab3a64", "source": "#include <iostream>\n#include <format>\n\nenum color { red, green, blue };\n\nconst char* color_names[] = { \"red\", \"green\", \"blue\" };\nconst char* jp_color_names[] = { \"\u8d64\", \"\u7dd1\", \"\u9752\" };\n\ntemplate<>\nstruct std::formatter<color> {\n bool is_jp = false;\n\n // \u30b3\u30f3\u30d1\u30a4\u30eb\u6642\u306e\u66f8\u5f0f\u6587\u5b57\u5217\u306e\u89e3\u6790\u304c\u3042\u308b\u305f\u3081\u3001\n // constexpr\u306b\u3059\u308b\u5fc5\u8981\u304c\u3042\u308b\u3002\n // \u3053\u306e\u95a2\u6570\u306b\u6e21\u3055\u308c\u308b\u30d1\u30e9\u30e1\u30fc\u30bf\u306f\u3001{:%j}\u306e%\u4ee5\u964d\u3002\n // \u89e3\u6790\u304c\u304a\u308f\u3063\u305f\u5834\u6240\u3092\u6307\u3059\u30a4\u30c6\u30ec\u30fc\u30bf\u3092\u8fd4\u3059\u3002\n constexpr auto parse(std::format_parse_context& ctx) {\n auto it = ctx.begin();\n if (*it == '%') {\n ++it;\n if (*it == 'j') {\n is_jp = true;\n }\n else if (*it == 'e') {\n is_jp = false;\n }\n ++it;\n }\n return it;\n }\n\n // format()\u95a2\u6570\u306f\u66f8\u5f0f\u306e\u60c5\u5831\u3092\u3082\u305f\u306a\u3044\u3002\n // parse()\u95a2\u6570\u3067\u89e3\u6790\u3057\u305f\u66f8\u5f0f\u3092\u30e1\u30f3\u30d0\u5909\u6570\u3067\u4fdd\u6301\u3057\u3066\u304a\u3044\u3066\u3001\n // \u305d\u308c\u3092\u3082\u3068\u306b\u66f8\u5f0f\u5316\u3059\u308b\n auto format(color c, std::format_context& ctx) const {\n return std::format_to(ctx.out(), \"{}\",\n is_jp ? jp_color_names[c] : color_names[c]\n );\n }\n};\n\nint main()\n{\n std::cout << std::format(\"{:%j} {:%e}\", red, blue) << std::endl;\n}\n"}], "page_id": ["reference", "format", "formatter"]}"> |
| 71 | +<header data-kunai-mdinfo="{"meta": {"header": ["format"], "id-type": ["class template"], "namespace": ["std"], "cpp": ["cpp20"]}, "sources": [{"id": "f0f1f0a4ab5ebbae12a3bb9c2578b97179eb8305", "source": "#include <iostream>\n#include <format>\n\nenum color { red, green, blue };\n\nconst char* color_names[] = { \"red\", \"green\", \"blue\" };\n\ntemplate<>\nstruct std::formatter<color> : std::formatter<const char*> {\n auto format(color c, std::format_context& ctx) const {\n return std::formatter<const char*>::format(color_names[c], ctx);\n }\n};\n\nint main()\n{\n std::cout << std::format(\"{}\", red) << std::endl;\n}\n"}, {"id": "795293b1e8ac834d0cb3e053df1bcc3f84ab3a64", "source": "#include <iostream>\n#include <format>\n\nenum color { red, green, blue };\n\nconst char* color_names[] = { \"red\", \"green\", \"blue\" };\nconst char* jp_color_names[] = { \"\u8d64\", \"\u7dd1\", \"\u9752\" };\n\ntemplate<>\nstruct std::formatter<color> {\n bool is_jp = false;\n\n // \u30b3\u30f3\u30d1\u30a4\u30eb\u6642\u306e\u66f8\u5f0f\u6587\u5b57\u5217\u306e\u89e3\u6790\u304c\u3042\u308b\u305f\u3081\u3001\n // constexpr\u306b\u3059\u308b\u5fc5\u8981\u304c\u3042\u308b\u3002\n // \u3053\u306e\u95a2\u6570\u306b\u6e21\u3055\u308c\u308b\u30d1\u30e9\u30e1\u30fc\u30bf\u306f\u3001{:%j}\u306e%\u4ee5\u964d\u3002\n // \u89e3\u6790\u304c\u304a\u308f\u3063\u305f\u5834\u6240\u3092\u6307\u3059\u30a4\u30c6\u30ec\u30fc\u30bf\u3092\u8fd4\u3059\u3002\n constexpr auto parse(std::format_parse_context& ctx) {\n auto it = ctx.begin();\n if (*it == '%') {\n ++it;\n if (*it == 'j') {\n is_jp = true;\n }\n else if (*it == 'e') {\n is_jp = false;\n }\n ++it;\n }\n return it;\n }\n\n // format()\u95a2\u6570\u306f\u66f8\u5f0f\u306e\u60c5\u5831\u3092\u3082\u305f\u306a\u3044\u3002\n // parse()\u95a2\u6570\u3067\u89e3\u6790\u3057\u305f\u66f8\u5f0f\u3092\u30e1\u30f3\u30d0\u5909\u6570\u3067\u4fdd\u6301\u3057\u3066\u304a\u3044\u3066\u3001\n // \u305d\u308c\u3092\u3082\u3068\u306b\u66f8\u5f0f\u5316\u3059\u308b\n auto format(color c, std::format_context& ctx) const {\n return std::format_to(ctx.out(), \"{}\",\n is_jp ? jp_color_names[c] : color_names[c]\n );\n }\n};\n\nint main()\n{\n std::cout << std::format(\"{:%j} {:%e}\", red, blue) << std::endl;\n}\n"}, {"id": "d25188a377882c9f6e282ac92bd1f5a4bd0c3fe9", "source": "#include <iostream>\n#include <format>\n\nstruct Point {\n float x, y;\n};\n\ntemplate<>\nstruct std::formatter<Point> : std::formatter<std::string> {\n auto format(Point p, std::format_context& ctx) const {\n return std::formatter<std::string>::format(\n std::format(\"[{}, {}]\", p.x, p.y),\n ctx);\n }\n};\n\nint main()\n{\n std::cout << std::format(\"{}\", Point{1.2f, 3.4f}) << std::endl;\n}\n"}], "page_id": ["reference", "format", "formatter"]}"> |
72 | 72 | <nav class="navbar navbar-default" role="navigation">
|
73 | 73 | <div class="container-fluid">
|
74 | 74 | <div class="navbar-header">
|
|
188 | 188 |
|
189 | 189 | <p class="text-right"><small>
|
190 | 190 | 最終更新日時(UTC):
|
191 |
| - <span itemprop="datePublished" content="2024-06-11T13:45:38"> |
192 |
| - 2024年06月11日 13時45分38秒 |
| 191 | + <span itemprop="datePublished" content="2024-09-17T22:26:07"> |
| 192 | + 2024年09月17日 22時26分07秒 |
193 | 193 | </span>
|
194 | 194 | <br/>
|
195 | 195 | <span itemprop="author" itemscope itemtype="http://schema.org/Person">
|
@@ -447,17 +447,42 @@ <h3>オリジナル書式を定義する例</h3>
|
447 | 447 | <h4>出力</h4>
|
448 | 448 | <p><pre><code>赤 blue
|
449 | 449 | </code></pre></p>
|
| 450 | +<h3>複数のメンバ変数を含むクラスの場合</h3> |
| 451 | +<p><div class="yata" id="d25188a377882c9f6e282ac92bd1f5a4bd0c3fe9"><div class="codehilite"><pre><span></span><code><span class="cp">#include</span> <span class="cpf"><a href="../iostream.html"><iostream></a></span><span class="cp"></span> |
| 452 | +<span class="cp">#include</span> <span class="cpf"><a href="../format.html"><format></a></span><span class="cp"></span> |
| 453 | + |
| 454 | +<span class="k">struct</span> <span class="n">Point</span> <span class="p">{</span> |
| 455 | + <span class="kt">float</span> <span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">;</span> |
| 456 | +<span class="p">};</span> |
| 457 | + |
| 458 | +<span class="k">template</span><span class="o"><></span> |
| 459 | +<span class="k">struct</span> <span class="n">std</span><span class="o">::</span><span class="n">formatter</span><span class="o"><</span><span class="n">Point</span><span class="o">></span> <span class="o">:</span> <span class="n">std</span><span class="o">::</span><span class="n">formatter</span><span class="o"><</span><span class="n"><a href="../string/basic_string.html">std::string</a></span><span class="o">></span> <span class="p">{</span> |
| 460 | + <span class="k">auto</span> <span class="n">format</span><span class="p">(</span><span class="n">Point</span> <span class="n">p</span><span class="p">,</span> <span class="n"><a href="basic_format_context.html">std::format_context</a></span><span class="o">&</span> <span class="n">ctx</span><span class="p">)</span> <span class="k">const</span> <span class="p">{</span> |
| 461 | + <span class="k">return</span> <span class="n">std</span><span class="o">::</span><span class="n">formatter</span><span class="o"><</span><span class="n"><a href="../string/basic_string.html">std::string</a></span><span class="o">>::</span><span class="n">format</span><span class="p">(</span> |
| 462 | + <span class="n"><a href="format.html">std::format</a></span><span class="p">(</span><span class="s">"[{}, {}]"</span><span class="p">,</span> <span class="n">p</span><span class="p">.</span><span class="n">x</span><span class="p">,</span> <span class="n">p</span><span class="p">.</span><span class="n">y</span><span class="p">),</span> |
| 463 | + <span class="n">ctx</span><span class="p">);</span> |
| 464 | + <span class="p">}</span> |
| 465 | +<span class="p">};</span> |
| 466 | + |
| 467 | +<span class="kt">int</span> <span class="nf">main</span><span class="p">()</span> |
| 468 | +<span class="p">{</span> |
| 469 | + <span class="n"><a href="../iostream/cout.html">std::cout</a></span> <span class="o"><<</span> <span class="n"><a href="format.html">std::format</a></span><span class="p">(</span><span class="s">"{}"</span><span class="p">,</span> <span class="n">Point</span><span class="p">{</span><span class="mf">1.2f</span><span class="p">,</span> <span class="mf">3.4f</span><span class="p">})</span> <span class="o"><<</span> <span class="n"><a href="../ostream/endl.html">std::endl</a></span><span class="p">;</span> |
| 470 | +<span class="p">}</span> |
| 471 | +</code></pre></div> |
| 472 | +</div></p> |
| 473 | +<h4>出力</h4> |
| 474 | +<p><pre><code>[1.2, 3.4] |
| 475 | +</code></pre></p> |
450 | 476 | <h2>バージョン</h2>
|
451 | 477 | <h3>言語</h3>
|
452 | 478 | <ul>
|
453 | 479 | <li>C++20</li>
|
454 | 480 | </ul>
|
455 | 481 | <h3>処理系</h3>
|
456 | 482 | <ul>
|
457 |
| -<li><a href="../../implementation.html#clang">Clang</a>: ??</li> |
| 483 | +<li><a href="../../implementation.html#clang">Clang</a>: 17 <span aria-label="検証済" role="img" title="検証済">✅</span></li> |
458 | 484 | <li><a href="../../implementation.html#gcc">GCC</a>: 13 <span aria-label="検証済" role="img" title="検証済">✅</span></li>
|
459 |
| -<li><a href="../../implementation.html#icc">ICC</a>: ??</li> |
460 |
| -<li><a href="../../implementation.html#visual_cpp">Visual C++</a>: ??</li> |
| 485 | +<li><a href="../../implementation.html#visual_cpp">Visual C++</a>: 2022 Update 2 <span aria-label="検証済" role="img" title="検証済">✅</span></li> |
461 | 486 | </ul>
|
462 | 487 | <h2>関連項目</h2>
|
463 | 488 | <ul>
|
|
0 commit comments