Как передать переменную перечисления в структуру со специализацией шаблона для перечисленияC++

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Anonymous
 Как передать переменную перечисления в структуру со специализацией шаблона для перечисления

Сообщение Anonymous »


Я создаю структуру со специализацией шаблона для перечисления, например:

шаблон структура TypeTrait; шаблон структура TypeTrait { статический constexpr uint32_t size = sizeof(int8_t); }; шаблон структура TypeTrait { статический constexpr uint32_t size = sizeof(int16_t); }; шаблон структура TypeTrait { статический constexpr uint32_t size = sizeof(uint16_t); }; шаблон структура TypeTrait { статический constexpr uint32_t size = sizeof(uint8_t); }; шаблон структура TypeTrait { статический constexpr uint32_t size = sizeof(uint16_t); }; шаблон структура TypeTrait { статический constexpr uint32_t size = sizeof(int32_t); }; шаблон структура TypeTrait { статический constexpr uint32_t size = sizeof(uint32_t); }; шаблон структура TypeTrait { статический constexpr uint32_t size = sizeof(float); }; enum DataType определяется следующим образом:

enum DataType { ДАННЫЕ_ТИП_INT8 = 0, ДАННЫЕ_ТИП_INT16 = 1, ДАННЫЕ_ТИП_FP16 = 2, ДАННЫЕ_ТИП_UINT8 = 3, ДАННЫЕ_ТИП_UINT16 = 4, ДАННЫЕ_ТИП_INT32 = 5, DATA_TYPE_UINT32 = 6, ДАННЫЕ_ТИП_FP32 = 7, DATA_TYPE_UNKOWN }; И я хочу передать переменную DataType в структуру TypeTrait, вот так:

класс Тест { публика: ... недействительный Конвертировать () { ... uint32_t size = TypeTrait::size; ... } частный: Тип данных тип_; }; Когда я это делаю, возникает проблема при компиляции моей программы:

main.cc: В функции-члене void Test::Convert(): main.cc:63:35: ошибка: использование «this» в постоянном выражении 63 | uint32_t size = TypeTrait::size; | ^~~~~ main.cc:63:40: ошибка: использование «this» в постоянном выражении 63 | uint32_t size = TypeTrait::size; | ^ main.cc:63:35: примечание: в аргументе шаблона для типа DataType. 63 | uint32_t size = TypeTrait::size; | ^~~~~ ^ Я пробовал много способов, например преобразовать type_ в константное значение, например:

const DataType dataType = type_; uint32_t size = TypeTrait::size; Потом и возникла эта проблема.
main.cc: В функции-члене void Test::Convert(): main.cc:63:39: ошибка: значение «типа» невозможно использовать в постоянном выражении 63 | uint32_t size = TypeTrait::size; | ^ main.cc:62:24: примечание: «тип» не был инициализирован постоянным выражением 62 | тип const DataType = GetType(); | ^~~~ main.cc:63:39: примечание: в аргументе шаблона для типа DataType. 63 | uint32_t size = TypeTrait::size; |
Я знаю, что с программой не возникнет проблем, если я передам элемент перечисления таким образом.

uint32_t size = TypeTrait::size; Я понятия не имею, как решить эту проблему. Поэтому мне приходится использовать переключатель, чтобы справиться с этим, что противоречит моему желанию. Я просто хочу убрать регистр переключателей в своих кодах. Код, подлежащий рефакторингу:
переключатель (dataType_) { случай DATA_TYPE_INT8: byteSize = elemCnt * sizeof(int8_t); перерыв; случай DATA_TYPE_INT16: byteSize = elemCnt * sizeof(int16_t); перерыв; случай DATA_TYPE_FP16: byteSize = elemCnt * sizeof(uint16_t); перерыв; случай DATA_TYPE_UINT8: byteSize = elemCnt * sizeof(uint8_t); перерыв; случай DATA_TYPE_UINT16: byteSize = elemCnt * sizeof(uint16_t); перерыв; случай DATA_TYPE_INT32: byteSize = elemCnt * sizeof(int32_t); перерыв; случай DATA_TYPE_UINT32: byteSize = elemCnt * sizeof(uint32_t); перерыв; случай DATA_TYPE_FP32: byteSize = elemCnt * sizeof(float); перерыв; }
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Как исключить объявление переменных со специализацией шаблона? [дубликат]
    Anonymous » » в форуме C++
    0 Ответы
    35 Просмотры
    Последнее сообщение Anonymous
  • Устранение ошибки компиляции со специализацией шаблона
    Anonymous » » в форуме C++
    0 Ответы
    24 Просмотры
    Последнее сообщение Anonymous
  • Диспетчеризация тегов со специализацией/перегрузкой шаблона
    Anonymous » » в форуме C++
    0 Ответы
    21 Просмотры
    Последнее сообщение Anonymous
  • Как подружиться с конкретной специализацией шаблона?
    Anonymous » » в форуме C++
    0 Ответы
    7 Просмотры
    Последнее сообщение Anonymous
  • ODB: сопоставление типов PostgreSQL Numeric с C++ int со специализацией value_traits
    Anonymous » » в форуме C++
    0 Ответы
    38 Просмотры
    Последнее сообщение Anonymous

Вернуться в «C++»