std::formatted_size
| Definido en el archivo de encabezado <format>
|
||
template<class... Args>
std::size_t formatted_size(std::string_view fmt, const Args&... args);
|
(1) | (desde C++20) |
template<class... Args>
std::size_t formatted_size(std::wstring_view fmt, const Args&... args);
|
(2) | (desde C++20) |
template<class... Args>
std::size_t formatted_size(const std::locale& loc, std::string_view fmt, const Args&... args);
|
(3) | (desde C++20) |
template<class... Args>
std::size_t formatted_size(const std::locale& loc, std::wstring_view fmt, const Args&... args);
|
(4) | (desde C++20) |
Determina el número total de caracteres en la cadena formateada, formateando a args de acuerdo a la cadena de formato fmt. Si está presente, se usa loc para un formato específico de la configuración regional.
El comportamiento no está definido si std::formatter<Ti, CharT> no cumple con los requerimientos de Formatter para cada Ti en Args.
Parámetros
| fmt | - | Vista sobre cadena que representa la cadena de formato.
Un objeto que representa la cadena de formato. La cadena de formato consiste en:
Cada campo de reemplazo tiene el siguiente formato:
arg-id especifica el índice del argumento en La especificación de formato se define por la especialización de std::formatter del argumento correspondiente.
| ||||
| args... | - | Argumentos a ser formateados. | ||||
| loc | - | std::locale usado para un formato específico de la configuración regional. |
Valor de retorno
El número total de caracteres en la cadena formateada.
Excepciones
Lanza std::format_error si fmt no es una cadena de formato válida para los argumentos proporcionados. También propaga cualquier excepción lanzada por el formateador.
Ejemplo
#include <format>
#include <iostream>
#include <vector>
#include <string_view>
int main()
{
using namespace std::literals::string_view_literals;
constexpr auto fmt_str { "Hubble's H{0} {1} {2:*^4} millas/sec/mpc."sv };
constexpr auto sub_zero { "₀"sv }; // { "\u2080"sv } => { 0xe2, 0x82, 0x80 };
constexpr auto aprox_equ { "≅"sv }; // { "\u2245"sv } => { 0xe2, 0x89, 0x85 };
constexpr int Ho { 42 }; // H₀
const auto min_buffer_size = std::formatted_size(fmt_str, sub_zero, aprox_equ, Ho);
std::cout << "Tamaño mínimo del búfer = " << min_buffer_size << '\n';
// Usar std::vector como búfer dinámico; búfer no incluye '\0' al final.
std::vector<char> buffer(min_buffer_size);
std::format_to_n(buffer.data(), buffer.size(), fmt_str, sub_zero, aprox_equ, Ho);
std::cout << "Búfer: \"" << std::string_view{buffer.data(), min_buffer_size} << "\"\n";
// O podemos imprimir el búfer directamente añadiendo '\0' al final.
buffer.push_back('\0');
std::cout << "Búfer: \"" << buffer.data() << "\"\n";
}
Salida:
Tamaño mínimo del búfer = 37
Búfer: "Hubble's H₀ ≅ *42* millas/sec/mpc."
Búfer: "Hubble's H₀ ≅ *42* millas/sec/mpc."
Véase también
(C++20) |
Escribe una representación formateada de sus argumentos mediante un iterador de salida. (plantilla de función) |
(C++20) |
Escribe una representación formateada de sus argumentos mediante un iterador de salida, no excediendo un tamaño específico. (plantilla de función) |