Подскажите пожалуйста как просчитать размер буфера (N) в compile-time для конверсии float/double/long double -> char[N]. Примерный код для конверсии приведен ниже [1]
Сам буффер char[N] будет находится в POD структуре, т.е. его размер надо знать уже во время компиляции. Подскажите пожалуйста, как посчитать размер буфера в таких условиях? (есть ли смысл использовать numeric_limits10<T>::max_digits10
+ X?)
[1] Конверсию планируется делать как-то так:
template <typename Decimal>
char* convertToBuffer(Decimal d,
char *buf,
std::size_t size,
std::size_t precision);
template <>
char* convertToBuffer(float d,
char *buf,
std::size_t size,
std::size_t precision)
{
auto written = std::snprintf(buf, size, "%.*f", precision, d);
if (written < 0)
throw std::runtime_error("conversion went wrong");
// %g не используется, ибо конверсия предпочтительно в виде %f
if (written >= size) {
written = std::snprintf(buf, size, "%e", d);
if (written < 0)
throw std::runtime_error("conversion went wrong");
}
return buf;
}