Namespaces
Variants

std:: basic_format_string, std:: format_string, std:: wformat_string

From cppreference.net
Definido en el encabezado <format>
template < class CharT, class ... Args >
struct basic_format_string ;
(1) (desde C++20)
template < class ... Args >

using format_string =

basic_format_string < char , std:: type_identity_t < Args > ... > ;
(2) (desde C++20)
template < class ... Args >

using wformat_string =

basic_format_string < wchar_t , std:: type_identity_t < Args > ... > ;
(3) (desde C++20)

La plantilla de clase std::basic_format_string encapsula un std::basic_string_view que será utilizado por las funciones de formato.

El constructor de std::basic_format_string realiza verificaciones en tiempo de compilación de la cadena de formato a menos que el argumento del constructor sea devuelto por std::runtime_format (desde C++26) .

Contenidos

Funciones miembro

(constructor)
construye un basic_format_string , generando un error de compilación si el argumento no es una cadena de formato
(función miembro pública)
get
devuelve la cadena encapsulada
(función miembro pública)

std::basic_format_string:: basic_format_string

template < class T >
consteval basic_format_string ( const T & s ) ;
(1)
basic_format_string ( /* cadena-de-formato-en-tiempo-de-ejecución */ < CharT > s ) noexcept ;
(2) (desde C++26)
1) Construye un objeto basic_format_string que almacena una vista de la cadena s . Si el argumento no es una constante en tiempo de compilación, o si no puede analizarse como una cadena de formato para los tipos de argumentos de formateo Args , la construcción está mal formada.
Esta sobrecarga participa en la resolución de sobrecarga solo si const T & modela std:: convertible_to < std:: basic_string_view < CharT >> .
2) Construye un objeto basic_format_string que almacena una vista de la cadena s como la devuelta por std::runtime_format . No realiza verificaciones de la cadena de formato durante la construcción.

Parámetros

s - un objeto que representa la cadena de formato. La cadena de formato consiste en
  • caracteres ordinarios (excepto { y } ), que se copian sin cambios a la salida,
  • secuencias de escape { { y } } , que se reemplazan con { y } respectivamente en la salida, y
  • campos de reemplazo.

Cada campo de reemplazo tiene el siguiente formato:

{ arg-id (opcional) } (1)
{ arg-id (opcional) : format-spec } (2)
1) campo de reemplazo sin especificación de formato
2) campo de reemplazo con especificación de formato
arg-id - especifica el índice del argumento en args cuyo valor se utilizará para el formato; si se omite, los argumentos se utilizan en orden.

Los arg-id s en una cadena de formato deben estar todos presentes o todos omitidos. Mezclar indexación manual y automática es un error.

format-spec - la especificación de formato definida por la especialización de std::formatter para el argumento correspondiente. No puede comenzar con } .

(desde C++23)
(desde C++26)
  • Para otros tipos formateables, la especificación de formato está determinada por especializaciones formatter definidas por el usuario.

std::basic_format_string:: get

constexpr std:: basic_string_view < CharT > get ( ) const noexcept ;

Devuelve la vista de cadena almacenada.

Notas

Las plantillas de alias format_string y wformat_string utilizan std::type_identity_t para inhibir la deducción de argumentos de plantilla. Normalmente, cuando aparecen como parámetro de función, sus argumentos de plantilla se deducen de otros argumentos de función.

template<class... Args>
std::string format(std::format_string<Args...> fmt, Args&&... args);
auto s = format("{} {}", 1.0, 2);
// Llama a format<double, int>. Args se deduce de 1.0, 2
// Debido al uso de type_identity_t en format_string, la deducción de argumentos de plantilla
// no considera el tipo de la cadena de formato.

Ejemplo

Informes de defectos

Los siguientes informes de defectos que modifican el comportamiento se aplicaron retroactivamente a los estándares de C++ publicados anteriormente.

DR Aplicado a Comportamiento publicado Comportamiento correcto
P2508R1 C++20 no existe un nombre visible para el usuario para esta funcionalidad el nombre basic_format_string está expuesto