Mi chiedevo se lo standard Boost.Format supporti l'utilizzo di un buffer a larghezza fissa/preallocato come output anziché un buffer dinamico gestito dalla stessa libreria di distribuzione?È possibile utilizzare Boost.Format con un buffer preallocato?
Che è, normalmente faresti:
boost::format myfmt("arg1: %1%/arg2: %2%");
// e.g.:
cout << (myfmt % 3.14 % 42);
// or
string s = boost::str(myfmt % "hey!" % "there!");
in modo che il Boost: lib Format avrà automaticamente la cura di allocare abbastanza spazio e la gestione del "buffer di uscita" per voi.
Mi chiedevo se c'è un modo per utilizzare un buffer di predefinire non dinamico con Boost.Format, cioè, qualcosa di simile:
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
So che potrei appena setacciare gli esempi, la documentazione e la fonte, ma a parte la mancanza di tempo atm. (e la sola possibilità di perdere qualcosa) sarebbe interessante sapere: Se non è possibile, sarebbe bello se qualcuno potesse spiegare perché (se c'è/sono specifici perché) - è stato deliberato? non corrisponde bene all'API? ...?
Disclaimer: Questa domanda è non sulle prestazioni!
Cosa vuoi che accada quando si esaurisce lo spazio? Per un buff fisso userei snprintf, ma quello sono io :) – nhed
@nhed Se non va bene, la libreria può/può lanciare un'eccezione o semplicemente smettere di riempire il buffer (simile a [le opzioni] (http://www.boost.org/doc/libs/1_47_0/libs/format/doc/format.html#exceptions) già disponibile) –
Non sono sicuro che tali eccezioni si applichino al buffer di destinazione – nhed