Zastanawiam się, czy Boost.Format obsługuje przy użyciu bufor o ustalonej szerokości/wstępnie przydzielone jako wyjście zamiast dynamicznego bufora zarządzanego przez samą bibliotekę?Czy można użyć Boost.Format z wstępnie przydzielonym buforem?
To znaczy, zwykle chcesz zrobić:
boost::format myfmt("arg1: %1%/arg2: %2%");
// e.g.:
cout << (myfmt % 3.14 % 42);
// or
string s = boost::str(myfmt % "hey!" % "there!");
więc Boost: Format lib automatycznie dbać o przydzielenie wystarczająco dużo miejsca i zarządzania „bufor wyjściowy” dla Ciebie.
Zastanawiałem się, czy istnieje jakikolwiek sposób, aby użyć predefine niedynamiczną bufor z Boost.Format, że jest coś takiego:
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
wiem, może po prostu przesiać przez przykłady i docs źródło, ale oprócz braku czasu atm. (i sama możliwość przegapienia czegoś) byłoby interesujące wiedzieć: Jeśli nie jest to możliwe, byłoby świetnie, gdyby ktoś mógł wyjaśnić, dlaczego (jeśli są/są konkretne problemy) - czy było to celowe? nie pasuje do interfejsu API? ...?
Nota prawna: To pytanie jest nie o wydajności!
Co chcesz zdarzyć, gdy zabraknie miejsca? Dla stałego buffa użyłbym snprintf, ale to ja :) – nhed
@nhed Jeśli nie pasuje, biblioteka może/mogłaby rzucić wyjątek lub po prostu przestać wypełniać bufor (podobnie jak [opcje] (http://www.boost.org/doc/libs/1_47_0/libs/format/doc/format.html#exceptions) już dostępne) –
Nie jestem pewien, czy te wyjątki dotyczą bufora docelowego. – nhed