From 373f49da92fb9c34115279a210f29067b6259e35 Mon Sep 17 00:00:00 2001 From: Akira Takahashi Date: Wed, 25 Jan 2023 11:56:38 +0900 Subject: [PATCH] =?UTF-8?q?range=5Fformatter=20:=20=E3=82=B5=E3=83=B3?= =?UTF-8?q?=E3=83=97=E3=83=AB=E3=82=B3=E3=83=BC=E3=83=89=E3=81=AE=E3=82=B3?= =?UTF-8?q?=E3=83=B3=E3=83=91=E3=82=A4=E3=83=AB=E3=81=8C=E9=80=9A=E3=82=89?= =?UTF-8?q?=E3=81=AA=E3=81=95=E3=81=9D=E3=81=86=E3=81=AA=E3=81=AE=E3=81=A7?= =?UTF-8?q?=E8=A6=8B=E7=9B=B4=E3=81=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- reference/format/range_formatter.md | 32 ++++++++++++++++++++++++++--- 1 file changed, 29 insertions(+), 3 deletions(-) diff --git a/reference/format/range_formatter.md b/reference/format/range_formatter.md index 5b0cec189a..7f3190b223 100644 --- a/reference/format/range_formatter.md +++ b/reference/format/range_formatter.md @@ -41,7 +41,31 @@ namespace std { #include template -class std::range_formatter> : public std::range_formatter> { +class MyVector { + std::vector v_; +public: + using base_type = std::vector; + using iterator = typename base_type::iterator; + using const_iterator = typename base_type::iterator; + using value_type = typename base_type::value_type; + using reference = typename base_type::reference; + using const_reference = typename base_type::const_reference; + + MyVector() = default; + MyVector(std::initializer_list init) + : v_(init.begin(), init.end()) {} + + iterator begin() { v_.begin(); } + const_iterator begin() const { v_.begin(); } + + iterator end() { v_.end(); } + const_iterator end() const { v_.end(); } + + const std::vector& base() const { return v_; } +}; + +template +class std::range_formatter> : public std::range_formatter> { bool is_colon = false; using base_type = std::range_formatter>; public: @@ -63,7 +87,7 @@ public: // format()関数は書式の情報をもたない。 // parse()関数で解析した書式をメンバ変数で保持しておいて、 // それをもとに書式化する - auto format(const std::vector& v, std::format_context& fctx) const { + auto format(const MyVector& v, std::format_context& fctx) const { if (is_colon) { auto out = fctx.out(); bool is_first = true; @@ -80,10 +104,12 @@ public: } return out; } - return base_type::format(v, fctx); + return base_type::format(v.base(), fctx); } }; +#include + int main() { std::vector v = {0xaa, 0xbb, 0xcc, 0xdd, 0xee, 0xff};