В одном из моих проектов у меня есть следующая иерархия шаблонов классов:
template <typename FruitType, typename ParentFilterType = void>
class filter;
template <typename FruitType> // Specialization when no parent filter is needed
class filter<FruitType, void>;
Где FruitType
может быть чем угодно.Допустим, это один из apple
, banana
или orange
.В общем, filter
может иметь свой собственный родительский тип filter
.
У меня нет контроля над кодом filter
: он должен оставаться как есть .
Код пользователя обычно выглядит следующим образом:
filter<apple, filter<banana, filter<orange> > > my_apple_filter;
Очевидно, это немного многословно.Я задавался вопросом, возможно ли получить что-то более читабельное.Что-то вроде:
complex_filter<apple, banana, orange>::type my_apple_filter;
Где complex_filter<apple, banana, orange>::type
будет преобразовано в filter<apple, filter<banana, filter<orange> > >
.
Я пытался с complex_filter
быть шаблоном struct
с typedef
внутри, но не имелпока успех.Количество параметров шаблона должно быть переменным (скажем, от 1 до 5).
Вам когда-нибудь нужно что-то подобное?Как я могу это сделать?
(я, к сожалению, не могу использовать C ++ 0x, но если есть более хорошее решение с ним, не стесняйтесь публиковать его, как это всегда полезно знать)
Спасибо.