Есть класс ImageType, который определяет битность и число каналов изображения (используется в качестве шаблонного параметра изображения).
template <class ChannelUnit, uint channels = 1>
class ImageType {
public:
struct PixelDefine {
typedef void Pixel;
};
typedef typename ChannelUnit ChannelUnit;
const static uint channelsCount = channels;
};
Для хранения различных типов Pixel применяется специализация этого класса. Пример для одноканального восьмибитного изображения:
template <>
struct ImageType<BYTE, 1>::PixelDefine {
typedef BYTE Pixel;
};
Реализация полной специализации для всех возможных типов излишне загромождает код. Хотелось бы сделать что-то вроде
template <class ChannelUnit>
struct RGB {
ChannelUnit _1, _2, _3;
};
..
template <class ChannelUnit>
struct ImageType<ChannelUnit, 3>::PixelDefine {
typedef RGB<ChannelUnit> Pixel;
};
К сожалению, такие фокусы компилятор уже не пропускает. Вопрос к знающим людям - как реализовать желаемое правильно?