Namespaces
Variants

C++ named requirements: Formatter (since C++20)

From cppreference.net
C++ named requirements

Formatter es un tipo que abstrae las operaciones de formato para un tipo de argumento de formato y tipo de carácter dados. Las especializaciones de std::formatter proporcionadas por la biblioteca estándar deben cumplir con los requisitos de Formatter excepto cuando se indique lo contrario.

Un Formatter puede formatear tanto argumentos const como no const, típicamente proporcionando una función miembro format que toma una referencia const.

Requisitos

Un tipo satisface Formatter si satisface BasicFormatter y dados los siguientes tipos y valores, las expresiones mostradas en la tabla a continuación son válidas y tienen la semántica indicada:

Tipo Definición
CharT un tipo de carácter
Arg un tipo de argumento de formato
Formatter un tipo Formatter para los tipos Arg y CharT
OutputIt un tipo LegacyOutputIterator
ParseCtx std:: basic_format_parse_context < CharT >
FmtCtx std:: basic_format_context < OutputIt, CharT >
Valor Definición
f un valor de tipo (posiblemente calificado como const) Formatter
arg un lvalue de tipo Arg
t un valor de tipo convertible a (posiblemente calificado como const) Arg
parse_ctx un lvalue de tipo ParseCtx que satisface todas las siguientes condiciones:
  • parse_ctx. begin ( ) apunta al inicio del format-spec del campo de reemplazo que se está formateando en la cadena de formato .
  • Si format-spec no está presente o está vacío, entonces parse_ctx. begin ( ) == parse_ctx. end ( ) o * parse_ctx. begin ( ) == '}' .
fmt_ctx un lvalue de tipo FmtCtx
Expresión Tipo de retorno Semántica
f. format ( t, fmt_ctx ) FmtCtx::iterator
  • Formatea t según los especificadores almacenados en f , escribe la salida a fmt_ctx. out ( ) y retorna un iterador final del rango de salida.
  • La salida solo puede depender de:
    • t ,
    • fmt_ctx. locale ( ) ,
    • el rango [ parse_ctx. begin ( ) , parse_ctx. end ( ) ) de la última llamada a f. parse ( parse_ctx ) , y
    • fmt_ctx. arg ( n ) para cualquier valor n de tipo std::size_t .
f. format ( arg, fmt_ctx ) FmtCtx::iterator Como arriba, pero no modifica arg .

Informes de defectos

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

DR Aplicado a Comportamiento publicado Comportamiento correcto
LWG 3892 C++20 el valor de pc. begin ( ) no estaba claro si format-spec no está presente aclarado