Estoy tratando de analizar la función de análisis para crear un formateador para un tipo personalizado en fmt. En su documentación (https://fmt.dev/dev/api.html) hay esta línea que tiene algún tipo de construcción de bucle que no he visto antes:

auto it = ctx.begin(), end = ctx.end();
if (it != end && (*it == 'f' || *it == 'e')) presentation = *it++;

Obviamente, es un ciclo que usa iteradores, presumiblemente algo nuevo en C ++ 17. ¿Qué es? Ejemplo completo aquí: https://godbolt.org/z/fEGvaj

0
schrödinbug 22 ene. 2021 a las 03:17

1 respuesta

La mejor respuesta

La función formatter::parse toma un contexto de análisis ctx y comprueba si el rango [ctx.begin(), ctx.end()) contiene especificadores de formato f o e en este ejemplo.

if (it != end && (*it == 'f' || *it == 'e')) presentation = *it++;
    ^                 ^             ^
 check if the         check if the first
 range is empty       character is 'f' or 'e'

No hay nada particularmente novedoso aquí, este código es compatible con C ++ 98.

0
vitaut 22 ene. 2021 a las 01:45