namespace std {
string
vformat(string_view fmt,
format_args args); // (1) C++20
constexpr string
vformat(string_view fmt,
format_args args); // (1) C++26
wstring
vformat(wstring_view fmt,
wformat_args args); // (2) C++20
constexpr wstring
vformat(wstring_view fmt,
wformat_args args); // (2) C++26
string
vformat(const locale& loc,
string_view fmt,
format_args args); // (3) C++20
wstring
vformat(const locale& loc,
wstring_view fmt,
wformat_args args); // (4) C++20
}
概要
書式文字列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
処理系
- Clang: 17
- GCC: 13
- Visual C++: ??
参照
- Working Draft, Standard for Programming Language C++ [format]
- P0645R10 Text Formatting
- P3391R2
constexpr std::format- C++26から非ロケール版が
constexprに対応した
- C++26から非ロケール版が