Привет, мне нужен массив чисел, которые будут точно не больше переменой n, в моем случае это размер определенного вектора. Как мне получить наименьший такой тип? Наример вектор имеет размер 10, но хранится он в uint64_t, что достаточно дорого выходит.
Нашел такое решение, но оно не работает в моем случае (наверное потому что мое число не constexpr)
template<unsigned long long Max>
struct RequiredBits
{
enum {
value =
Max <= 0xff ? 8 :
Max <= 0xffff ? 16 :
Max <= 0xffffffff ? 32 :
64
};
};
template<int bits> struct SelectInteger_;
template<> struct SelectInteger_ <8> { typedef uint8_t type; };
template<> struct SelectInteger_<16> { typedef uint16_t type; };
template<> struct SelectInteger_<32> { typedef uint32_t type; };
template<> struct SelectInteger_<64> { typedef uint64_t type; };
template<unsigned long long Max>
struct SelectInteger : SelectInteger_<RequiredBits<Max>::value> {};