- format[meta header]
- function template[meta id-type]
- std[meta namespace]
- cpp20[meta cpp]
namespace std {
template<class Out, class... Args>
format_to_n_result<Out>
format_to_n(Out out,
iter_difference_t<Out> n,
format_string<Args...> fmt,
Args&&... args); // (1)
template<class Out, class... Args>
format_to_n_result<Out>
format_to_n(Out out,
iter_difference_t<Out> n,
wformat_string<Args...> fmt,
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,
format_string<Args...> fmt,
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,
wformat_string<Args...> fmt,
Args&&... args); // (4)
}- format_string[link basic_format_string.md]
- wformat_string[link basic_format_string.md]
- format_to_n_result[link format_to_n_result.md]
- locale[link /reference/locale/locale.md]
書式文字列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.- 書式文字列は定数式であり、
string_view(ワイド文字列版はwstring_view)に暗黙変換できること。 - 書式文字列にエラーがないこと。例えば、
- 閉じていないカッコなどの構文エラーがないこと。
- 実際に渡している引数の型が書式文字列中の置換フィールドが要求する型に合うこと。
charTをdecltype(fmt)::value_typeとして、
OutはOutputIterator<const charT&>を満たす。
charTをdecltype(fmt)::value_typeとして、
outはOutputIterator<const charT&>を満たす型の有効なオブジェクトである。Argsのそれぞれの引数Tiに対応するフォーマッターformatter<remove_cvref_t<Ti>, charT>がBasicFormatter要件を満たす。
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
- Clang: ??
- GCC: ??
- ICC: ??
- Visual C++: ??