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

履歴 編集

function template
<format>

std::format_to(C++20)

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

  template<class Out, class... Args>
  Out format_to(Out out, wstring_view fmt, const Args&... args); // (2)

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

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

概要

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

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

string buffer;
format_to(back_inserter(buffer), "The answer is {}.", 42);

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

Outは以下の制約を満たす。

  • (1),(3): OutputIterator<const char&>
  • (2),(4): OutputIterator<const wchar_t&>

事前条件

outは以下の制約を満たす型の有効なオブジェクトである。

  • (1),(3): OutputIterator<const char&>
  • (2),(4): OutputIterator<const wchar_t&>

効果

以下のコードと等しい。

using context = basic_format_context<Out, decltype(fmt)::value_type>;
// (1), (2)
return vformat_to(out, fmt, {make_format_args<context>(args...)});
// (3), (4)
return vformat_to(out, loc, fmt, {make_format_args<context>(args...)});

戻り値

out + N (ただし、N=formatted_size(fmt, args...) または formatted_size(loc, fmt, args...))

例外

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

備考

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

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

int main()
{
  std::string buffer;
  std::format_to(std::back_inserter(buffer), "The answer is {}.", 42);
  std::cout << buffer << std::endl;
}

出力

The answer is 42.

実装例

template<class Out, class... Args>
string format_to(Out out, string_view fmt, const Args&... args)
{
  using context = basic_format_context<Out, decltype(fmt)::value_type>;
  return vformat_to(out, fmt, {make_format_args<context>(args...)});
}

template<class Out, class... Args>
wstring format_to(Out out, wstring_view fmt, const Args&... args)
{
  using context = basic_format_context<Out, decltype(fmt)::value_type>;
  return vformat_to(out, fmt, {make_format_args<context>(args...)});
}

template<class Out, class... Args>
string format_to(Out out, const locale& loc, string_view fmt, const Args&... args)
{
  using context = basic_format_context<Out, decltype(fmt)::value_type>;
  return vformat_to(out, loc, fmt, {make_format_args<context>(args...)});
}

template<class Out, class... Args>
wstring format_to(Out out, const locale& loc, wstring_view fmt, const Args&... args)
{
  using context = basic_format_context<Out, decltype(fmt)::value_type>;
  return vformat_to(out, loc, fmt, {make_format_args<context>(args...)});
}

バージョン

言語

  • C++20

処理系

参照