Cadena de formato printf verificada

¿Existe una biblioteca C/C++ que pueda formatear de forma similar a printfuna cadena de formato, pero que verifique si esta cadena de formato cumple ciertas restricciones y coincide con los argumentos?

La razón es que el programa debe tomar una cadena de formato de la entrada del usuario, como plantilla para una serie de nombres de archivo, con una variable de índice de número entero. Entonces el usuario podría proporcionar image%d.pngo image%.6d.png, pero hack_%d_%sno sería aceptado.

Respuestas (1)

La respuesta más inmediata a su pregunta es, creo, tinyformat , que solo tiene como objetivo proporcionar un printf()reemplazo seguro para tipos y está en uso. Sin embargo, no te recomendaría que elijas ese.

Probablemente le sirva mejor fmt , que tiene un alcance más amplio pero hace más, ha visto más desarrollo y tiene un uso más amplio (también está el FastFormat más antiguo ). Como verás en los enlaces, no te fallarán printf().

Si desea que lo haga usted mismo lo más básico posible, existe una idea de implementación segura basada en plantillas variádicas de la printf()luminaria de C++ Andrei Alexandrescu de 20120; consulte esta respuesta de StackOverflow.com para obtener más detalles.


Una nota final fuera del alcance del escenario específico de OP: con C ++ 17, se ha vuelto posible ir incluso más allá de todas estas opciones y usar constexprconstantes de cadena de formato para realizar la verificación completamente en tiempo de compilación en lugar de en tiempo de ejecución. lo cual sería increíble (asumiendo, por supuesto, que conoce su formato de antemano). Nada de eso se ha lanzado a partir de ahora (que yo sepa).

¿Cómo ayudan las cadenas de formato constexpr a OP, que quiere ingresar una cadena de formato desde el teclado?
@IraBaxter: no ayuda en el caso específico de OP, pero ayuda en el caso general representado por el título de la pregunta. Editaré para aclarar eso.