Я ищу конструкцию, которая позволяет компилятору выбирать минимальный тип данных для данного целого числа в параметре шаблона.Проблема, по которой я не смог найти решение самостоятельно, заключается в том, как я хочу его использовать:
template<typename T, min_type<max_elements_to_store> max_elements_to_store>
class testClass {
private:
T data[max_elements_to_store];
min_type<max_elements_to_store> currently_selected_element;
};
Макрос "min_type" должен динамически выбирать тип с минимальным количеством битов для данного max_elements_to_store (uint8_t, uint16_t, uint32_t, uint64_t).Я мог бы исправить это, просто заменив min_type <> данным типом данных, но этот тип данных часто не был бы наилучшим выбором.Например,
template<typename T, uint64_t max_elements_to_store>
class testClass {
private:
T data[max_elements_to_store];
uint64_t currently_selected_element;
};
TestClass<uint8_t, 12> testObject;
Здесь массив будет содержать только 12 элементов, а переменная current_selected_element тратит много битов, которые просто не нужны для доступа только к 12 элементам.Кажется, это только небольшая проблема, но она ухудшается для многих переменных для доступа к данным в классе ...
Есть ли решение этой проблемы?Надеюсь, понятно, что я ищу.
Заранее спасибо!Inspire