Espacios de nombres
Variantes
Acciones

Requisitos denominados de C++: BasicFormatter (desde C++20)

De cppreference.com
< cpp‎ | named req
 
 
Requisitos denominados de C++
Números aleatorios
Concurrencia
(C++11)
(C++11)
Rangos
Vista multidimensional
Otros

 

BasicFormatter es un tipo que abstrae las operaciones de formato para un tipo de argumento de formato y un tipo de caracter determinados.

Se requieren especializaciones de std::formatter para cumplir con los requisitos de BasicFormatter.

Un BasicFormatter es un Formatter si es capaz de formatear argumentos const y no-const.

[editar] Requisitos

Un tipo satisface BasicFormatter si este es semiregular, es decir, que satisface:

Y, dados los siguientes tipos y valores, las expresiones mostradas en la siguiente tabla son válidas y tienen la semántica indicada:

Tipo Definición
CharT un tipo caracter
Arg un tipo de argumento de formato
Formatter un tipo Formatter para tipos Arg y CharT
OutputIt un tipo OutputIterator
ParseCtx std::basic_format_parse_context<CharT>
FmtCtx std::basic_format_context<OutputIt, CharT>
Valor Definición
f un valor de tipo (posiblemente calificado const) Formatter
g un valor de tipo Formatter
arg un l-valor de tipo Arg
t un valor de tipo convertible a (posiblemente calificado const) Arg
parse_ctx un l-valor de tipo ParseCtx que satisfaga todas las siguientes condiciones:
  • parse_ctx.begin() apunta al principio de la especificación de formato del campo de reemplazo siendo formateado en la cadena de formato.
  • Si la especificación de formato no está presente o es vacía, entonces alguno entre parse_ctx.begin() == parse_ctx.end() o *parse_ctx.begin() == '}'.
fmt_ctx un l-valor de tipo FmtCtx
Expresión Tipo de retorno Semánticas
g.parse(parse_ctx) ParseCtx::iterator 
  • En el rango [parse_ctx.begin()parse_ctx.end()), analiza gramaticalmente la especificación de formato para el tipo Arg hasta el primer caracter no coincidente.
  • Lanza std::format_error a menos que el rango completo sea analizado gramaticalmente, o el caracter no coincidente sea }. [nota 1]
  • Almacena los especificadores de formato analizados en g y devuelve un iterador de fin al rango analizado.
f.format(arg, fmt_ctx) FmtCtx::iterator
  • Formatea arg de acuerdo a los especificadores almacenados en f, escribe la salida a fmt_ctx.out() y devuelve un iterador de fin del rango de salida.
  • La salida debe depender solamente de
    • arg,
    • fmt_ctx.locale(),
    • el rango [parse_ctx.begin()parse_ctx.end()) desde la última llamada a f.parse(parse_ctx), y
    • fmt_ctx.arg(n) para cualquier valor n de tipo std::size_t.
  1. Esto permite a los formateadores emitir mensajes de errores significativos.

[editar] Informes de defectos

Los siguientes informes de defectos de cambio de comportamiento se aplicaron de manera retroactiva a los estándares de C++ publicados anteriormente.

ID Aplicado a Comportamiento según lo publicado Comportamiento correcto
LWG 3892 C++20 el valor de pc.begin() no estaba claro si la especificación de formato no está presente aclarado