namespace std {
template<class Context = format_context, class... Args>
format_arg_store<Context, Args...> make_format_args(Args&&... args); // (1)
template<class... Args>
format_arg_store<wformat_context, Args...> make_wformat_args(Args&&... args); // (2)
}
概要
可変長引数の型を消去して、basic_format_arg
の列に変換する。
戻り値の型 format_arg_store
は便宜上次の通り定義されるが、その型名は規格に含まれない。
namespace std {
template<class Context, class... Args>
struct format_arg_store { // exposition only
array<basic_format_arg<Context>, sizeof...(Args)> args;
};
}
basic_format_args
はformat_arg_store
から構築できる。
make_format_args
の結果はただちにbasic_format_args
へ変換するのが意図された使い方である。
template<class... Args>
string format(string_view fmt, const Args&... args)
{
return vformat(fmt, {make_format_args(args...)}); // format_arg_store から format_args へ暗黙変換
}
事前条件
すべての引数の型Ti
についてContext::formatter_type<Ti>
がFormatter
要件を満たすこと。
戻り値
(1)
return {basic_format_arg<Context>(args)...}
(2)
return make_format_args<wformat_context>(args...);
実装例
namespace std {
template<class Context = format_context, class... Args>
format_arg_store<Context, Args...> make_format_args(const Args&... args)
{
return {basic_format_arg<Context>(args)...}
}
template<class... Args>
format_arg_store<wformat_context, Args...> make_wformat_args(const Args&... args)
{
return make_format_args<wformat_context>(args...);
}
}
バージョン
言語
- C++20
処理系
- Clang: ??
- GCC: ??
- ICC: ??
- Visual C++: ??