最終更新日時: 2026年06月01日 03時20分27秒 (JST)
Tetsuro Matsumura が更新

履歴 編集

class
<format>

# std::basic_format_arg::handle(C++20)

    namespace std {
      template<class Context>
      class basic_format_arg<Context>::handle;
    }

## 概要

`basic_format_arg`においてユーザー定義型の値とフォーマット関数のアドレスを保持するのに使用されるクラス。

## メンバ関数

名前 | 説明 | 対応バージョン
--- | --- | ---
`format` | ユーザー定義型に対応するフォーマット関数を実行する | C++20

## 実装例

    namespace std {
      template<class Context>
      class basic_format_arg<Context>::handle {
        using charT = typename Context::char_type;
        using format_function = void(*)(basic_format_parse_context<charT>&, Context&, const void*);

        const void* ptr_;
        format_function format_;

        template<class T> explicit handle(const T& val) noexcept
          :ptr_(addressof(val))
          ,format_(
            [](basic_format_parse_context<charT>& parse_ctx, Context& format_ctx, const void* ptr) {
              typename Context::template formatter_type<T> f;
              parse_ctx.advance_to(f.parse(parse_ctx));
              format_ctx.advance_to(f.format(*static_cast<const T*>(ptr), format_ctx));
            }
          )
        {}

        friend class basic_format_arg<Context>;

      public:
        void format(basic_format_parse_context<charT>& parse_ctx, Context& format_ctx) const
        {
          format_(parse_ctx, format_ctx, ptr_);
        }
      };
    }

## バージョン

### 言語

- C++20

### 処理系

- Clang: ??
- GCC: ??
- ICC: ??
- Visual C++: ??

## 参照

- P0645R10 Text Formatting