Я пытаюсь восстановить тип массива в зависимости от размера его элементов. Я думаю, что я не могу использовать шаблоны для этого. Есть ли способ достичь этого без операторов switch? Или, если это невозможно без операторов switch, есть ли способ встроить оператор switch в класс (caster). Мне нравится идея класса кастера, потому что есть много функций, кроме копирования, которые нуждаются в подобном приведении.
copy_region(uint8_t *, int);
copy_region(uint16_t *, int);
copy_region(uint32_t *, int);
void copier(uint8_t *ptr_element, int sz_element) {
copy_region( caster(sz_element, ptr_element), n);
}
Решение для переключения, которое у меня есть, выглядит следующим образом:
void copier(uint8_t *ptr_element, int sz_element) {
switch(sz_element){
case 1: copy_region( uint8_t*(ptr_element), n); break;
case 2: copy_region( uint16_t*(ptr_element), n); break;
case 4: copy_region( uint16_t*(ptr_element), n); break;
}
}
Я также думал об определении операций как функторов, чтобы у меня мог быть один оператор switch, но параметры для различных операций очень различны.
Edit:
Информация о типе не теряется. Я пытаюсь реализовать систему (библиотека / фреймворк) с шаблонными буферами. У меня есть базовый буферный класс на основе uint8_t в качестве элемента. Этот класс существует, потому что мне нужно вставить буферы в список. Базовый класс буфера реализует операции над этими буферами. Пользователь указывает тип буфера в качестве аргумента шаблона для класса буфера, но библиотека видит только базовый класс буфера и информацию о типе (размер элемента достаточен для вывода типа).