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

履歴 編集

function template
<format>

std::format_to_n(C++20)

namespace std {
  template<class Out, class... Args>
  format_to_n_result<Out> format_to_n(Out out, iter_difference_t<Out> n, string_view fmt, const Args&... args); // (1)

  template<class Out, class... Args>
  format_to_n_result<Out> format_to_n(Out out, iter_difference_t<Out> n, wstring_view fmt, const Args&... args); // (2)

  template<class Out, class... Args>
  format_to_n_result<Out> format_to_n(Out out, iter_difference_t<Out> n, const locale& loc, string_view fmt, const Args&... args); // (3)

  template<class Out, class... Args>
  format_to_n_result<Out> format_to_n(Out out, iter_difference_t<Out> n, const locale& loc, wstring_view fmt, const Args&... args); // (4)
}

概要

書式文字列fmtに従ったフォーマットでargs...の文字列表現を、最大でn文字だけ出力イテレーターoutに出力する。

  • (1): マルチバイト文字列版
  • (2): ワイド文字列版
  • (3): マルチバイト文字列版 (ロケール指定あり)
  • (4): ワイド文字列版 (ロケール指定あり)

char buffer[256];
auto [end, n] = format_to_n(buffer, size(buffer)-1, "The answer is {}.", 42);
*end = '\0';    // null文字は出力されない
cout << buffer; // The answer is 42.

テンプレートパラメータ制約

charTdecltype(fmt)::value_typeとして、

  • OutOutputIterator<const charT&>を満たす。

事前条件

charTdecltype(fmt)::value_typeとして、

  • outOutputIterator<const charT&>を満たす型の有効なオブジェクトである。
  • Argsのそれぞれの引数Tiに対応するフォーマッターformatter<Ti, charT>Formatter要件を満たす。

戻り値

format_to_n_result{out + M, N} (ただし、N = formatted_size(fmt, args...) または formatted_size(loc, fmt, args...)M = min(max(n, 0), N))

例外

書式文字列が正しくなかったり、フォーマット実行時に失敗したりした場合、format_errorを投げる。

備考

マルチバイト文字列、ワイド文字列の区別は、可変長引数部分で受け取れる文字列の型にも適用される。

#include <iostream>
#include <string>
#include <format>

int main()
{
  char buffer[256];
  auto [end, n] = std::format_to_n(buffer, std::size(buffer)-1, "The answer is {}.", 42);
  *end = '\0';
  std::cout << buffer << std::endl;
}

出力

The answer is 42.

バージョン

言語

  • C++20

処理系

参照