Приведение типа во время выполнения на основе размера в c ++

Я пытаюсь восстановить тип массива на основе размера его элементов. Думаю, я не могу использовать для этого шаблоны. Есть ли способ добиться этого без операторов switch? Или, если это невозможно без операторов switch, есть ли способ встроить оператор switch в класс (caster). Мне нравится идея класса 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);
}

Решение switch, которое у меня есть, выглядит следующим образом:

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, но параметры для разных операций очень разные.

Редактировать:

Информация о типе не теряется. Я пытаюсь реализовать систему (библиотеку / фреймворк) с шаблонными буферами. У меня есть базовый класс буфера, основанный на элементе uint8_t. Этот класс существует, потому что мне нужно вставить буферы в список. Базовый класс буфера реализует операции с этими буферами. Пользователь указывает тип буфера в качестве аргумента шаблона для класса буфера, но библиотека видит только базовый класс буфера и информацию о типе (размера элемента достаточно для определения типа).

0
задан perreal 8 November 2011 в 22:37
поделиться