Есть у меня файл, типа spi.h, в нём - перечисление всех имеющихся SPI:
Код
enum SpiNum {
SPI_1,
#if (SPI_COUNT>1)
SPI_2,
#elif (SPI_COUNT>2)
SPI_3
#endif
};
Захотелось мне избавиться от дефайнов, и переделать это на шаблоны.
Делаю так:
Код
template<int SPI_Count> struct SpiEnumTraits;
template<> struct SpiEnumTraits<1> { enum SpiNum { SPI_1 }; };
template<> struct SpiEnumTraits<2> { enum SpiNum { SPI_1, SPI_2 }; };
template<> struct SpiEnumTraits<3> { enum SpiNum { SPI_1, SPI_2, SPI_3 }; };
template<> struct SpiEnumTraits<4> { enum SpiNum { SPI_1, SPI_2, SPI_3, SPI_4 }; };
typedef typename SpiEnumTraits<chip::spi_count>::SpiNum SpiNum;
На саму эту конструкцию компилятор не ругается, а вот на любые упоминания в тексте программы элементов перечисления (SPI_1 и т. д.) - ругается, мол, символ неопределён. Видимо, я что-то делаю неправильно, но вот что?
Если бы я знал, что такое электричество...