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

履歴 編集

function
<format>

std::vformat(C++20)

namespace std {
  string vformat(string_view fmt, format_args args); // (1)

  wstring vformat(wstring_view fmt, wformat_args args); // (2)

  string vformat(const locale& loc, string_view fmt, format_args args); // (3)

  wstring vformat(const locale& loc, wstring_view fmt, wformat_args args); // (4)
}

概要

書式文字列fmtに従ったフォーマットでargsの文字列表現を文字列オブジェクトで返す。

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

std::format()関数のフォーマット引数を実行時文字列にしたバージョンであり、std::format()関数の内部で使用される。

std::format()のような関数を自作する場合にこの関数を使って実装すると便利であるほか、実行時文字列でフォーマット引数を構築したい場合にも利用できる。

C++26以降は、実行時文字列のフォーマット引数を使用したい場合は、std::runtime_format()関数を使用できる。

戻り値

argsの文字列表現を保持する文字列

例外

フォーマット実行時に失敗した場合、format_errorを投げる。

#include <iostream>
#include <format>

int main() {
  std::string fmt = "0x{:x} 0b{:04b}";
  std::string s = std::vformat(fmt, std::make_format_args(10, 6));
  std::cout << s << std::endl;
}

出力

0xa 0b0110

実装例

string vformat(string_view fmt, format_args args) {
  string str;
  vformat_to(back_inserter(str), fmt.str, args);
  return str;
}

string vformat(wstring_view fmt, wformat_args args) {
  wstring str;
  vformat_to(back_inserter(str), fmt.str, args);
  return str;
}

string vformat(const locale& loc, string_view fmt, format_args args) {
  string str;
  vformat_to(loc, back_inserter(str), fmt.str, args);
  return str;
}

string vformat(const locale& loc, wstring_view fmt, wformat_args args) {
  wstring str;
  vformat_to(loc, back_inserter(str), fmt.str, args);
  return str;
}

バージョン

言語

  • C++20

処理系

参照