Me preguntaba si Boost.Format admite el uso de un búfer de ancho fijo/preasignado como salida en lugar de un búfer dinámico administrado por la lib misma.¿Es posible usar Boost.Format con un búfer preasignado?
Eso es, normalmente harías:
boost::format myfmt("arg1: %1%/arg2: %2%");
// e.g.:
cout << (myfmt % 3.14 % 42);
// or
string s = boost::str(myfmt % "hey!" % "there!");
por lo que el Boost: lib formato será automáticamente se encargará de asignar espacio suficiente y la gestión de la "memoria intermedia de salida" para usted.
Me preguntaba si hay alguna manera de usar un tampón predefinido no dinámica con Boost.Format, es decir, algo así como:
const size_t buf_sz = 512;
char big_enough[buf_sz];
boost::format myfmt("arg1: %1%/arg2: %2%");
myfmt.attach_buffer(big_enough, buf_sz);
myfmt % "hey!" % "there!"
// big_enough buffer now contains the result string
Sé que sólo pudiera tamizar a través de los ejemplos, los documentos y la fuente, pero aparte de carecer de tiempo atm. (y la posibilidad de perder algo) sería interesante saber: Si no es posible, sería genial si alguien pudiera explicar por qué (si hay/hay por qué), ¿fue deliberado? no coincide bien con la API? ...?
Descargo de responsabilidad: ¡Esta pregunta es no sobre el rendimiento!
¿Qué desea que suceda cuando se queda sin espacio? Para un buff fijo usaría snprintf, pero ese soy yo :) – nhed
@nhed Si no encaja, la biblioteca puede/podría lanzar una excepción o simplemente dejar de llenar el búfer (similar a [las opciones] (http://www.boost.org/doc/libs/1_47_0/libs/format/doc/format.html#exceptions) ya disponible) –
No estoy seguro de que esas excepciones se apliquen al almacenamiento intermedio de destino – nhed