最終更新日時(UTC):
が更新

履歴 編集

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_function(
        [](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

処理系

参照