std:: formatted_size
|
ヘッダーで定義
<format>
|
||
|
template
<
class
...
Args
>
std:: size_t formatted_size ( std:: format_string < Args... > fmt, Args && ... args ) ; |
(1) | (C++20以降) |
|
template
<
class
...
Args
>
std:: size_t formatted_size ( std:: wformat_string < Args... > fmt, Args && ... args ) ; |
(2) | (C++20以降) |
|
template
<
class
...
Args
>
std::
size_t
formatted_size
(
const
std::
locale
&
loc,
|
(3) | (C++20以降) |
|
template
<
class
...
Args
>
std::
size_t
formatted_size
(
const
std::
locale
&
loc,
|
(4) | (C++20以降) |
フォーマット文字列 fmt に従って args をフォーマットした結果の文字列の総文字数を決定します。存在する場合、 loc はロケール固有のフォーマットに使用されます。
Args
内のいずれかの
Ti
について
std::
formatter
<
std::
remove_cvref_t
<
Ti
>
, CharT
>
が
BasicFormatter
要件を満たさない場合、動作は未定義です。
目次 |
パラメータ
| fmt | - |
フォーマット文字列を表すオブジェクト。フォーマット文字列は以下から構成される:
各置換フィールドは以下の形式を持つ:
1)
フォーマット指定なしの置換フィールド
2)
フォーマット指定ありの置換フィールド
|
||||||||||||||||||||||||||||||||||||||||||||||
| args... | - | フォーマットされる引数 | ||||||||||||||||||||||||||||||||||||||||||||||
| loc | - | ロケール固有のフォーマットに使用される std::locale | ||||||||||||||||||||||||||||||||||||||||||||||
戻り値
フォーマットされた文字列の総文字数。
例外
formatterによってスローされた例外を伝播します。
例
#include <format> #include <iomanip> #include <iostream> #include <string_view> #include <vector> int main() { using namespace std::literals::string_view_literals; constexpr auto fmt_str{"Hubble's H{0} {1} {2:*^4} miles/sec/mpc."sv}; constexpr auto sub_zero{"\N{SUBSCRIPT ZERO}"sv}; // "₀" or {0342, 130, 128} constexpr auto aprox_equ{"\N{APPROXIMATELY EQUAL TO}"sv}; // "≅" or {0342, 137, 133} constexpr int Ho{42}; // H₀ const auto min_buffer_size{std::formatted_size(fmt_str, sub_zero, aprox_equ, Ho)}; std::cout << "Min buffer size = " << min_buffer_size << '\n'; // Use std::vector as dynamic buffer. The buffer does not include the trailing '\0'. std::vector<char> buffer(min_buffer_size); std::format_to_n(buffer.data(), buffer.size(), fmt_str, sub_zero, aprox_equ, Ho); std::cout << "Buffer: " << std::quoted(std::string_view{buffer.data(), min_buffer_size}) << '\n'; // Print the buffer directly after adding the trailing '\0'. buffer.push_back('\0'); std::cout << "Buffer: " << std::quoted(buffer.data()) << '\n'; }
出力:
Min buffer size = 37 Buffer: "Hubble's H₀ ≅ *42* miles/sec/mpc." Buffer: "Hubble's H₀ ≅ *42* miles/sec/mpc."
欠陥報告
以下の動作変更の欠陥報告書は、以前に公開されたC++規格に対して遡及的に適用されました。
| DR | Applied to | Behavior as published | Correct behavior |
|---|---|---|---|
| P2216R3 | C++20 | 不正なフォーマット文字列に対して std::format_error をスロー | 不正なフォーマット文字列はコンパイル時エラーとなる |
| P2418R2 | C++20 |
const-usableでもcopyableでもないオブジェクト
(ジェネレーターのようなオブジェクト)はフォーマット不可 |
これらのオブジェクトのフォーマットを許可 |
| P2508R1 | C++20 | この機能に対するユーザー可視の名前が存在しない |
名前
basic_format_string
が公開される
|
関連項目
|
(C++20)
|
引数の書式化された表現を出力イテレータを通して書き出す
(関数テンプレート) |
|
(C++20)
|
引数の書式化された表現を出力イテレータを通して書き出す(指定されたサイズを超えない)
(関数テンプレート) |