Я пытаюсь вычислить константу в зависимости от типа и некоторого другого значения с помощью метапрограммирования шаблонов.Специализация шаблона в зависимости от типа
template <typename t, uint8_t number_of_bits> struct bin_size {};
template <>
struct bin_size<uint8_t, uint8_t number_of_bits> {
const uint8_t upper_bound = 255;
};
template <>
struct bin_size<int32_t, uint8_t number_of_bits> {
const uint8_t upper_bound = 60 * number_of_bits * 10;
};
Однако компилятор (ARM-None-EABI-G ++ (GNU Инструменты для ARM встраиваемых процессоров (Ардуино построить)) 4.8.3 20140228 (выпуск) [ARM/версия встроенного-4_8-ветви 208322] ) жалуется на следующие ошибки.
test.cpp:287:52: error: template argument 2 is invalid
struct bin_size<uint8_t, uint8_t number_of_bits> {
^
test.cpp:292:52: error: template argument 2 is invalid
struct bin_size<int32_t, uint8_t number_of_bits> {
^
Error compiling.
Без функции number_of_bits все работает как следует. Но я не могу понять, как специализироваться на имени типа, но не на количестве бит. Как это может быть сделано?
В данном конкретном случае я решил его таким образом: шаблон <имяТипа bins_t, uint8_t NUMBER_OF_BITS> структура bin_size { сопзЬ bins_t upper_bound = sizeof (upper_bound) == 1? 255: 60 * number_of_bits * 10; }; Но все же мне интересно, как это можно решить с помощью метапрограммного подхода. –