Шаблон множественного наследования
От: Коваленко Дмитрий Россия http://www.ibprovider.com
Дата: 27.05.10 13:05
Оценка:
Привет всем.

Возникла задача создания шаблона, который будет реализовывать множественное наследование от некоторого набора интерфейсов/классов.

Накатал следующий класс:
template<class T1,class T2,class T3=t_dummy,class T4=t_dummy,class T5=t_dummy>
class t_aggregator:public T1,
                   public T2,
                   public T3,
                   public T4,
                   public T5
{};


При использовании, получаю ошибку:
Ошибка 1 error C2500: structure::t_aggregator<T1,T2>: 'structure::t_dummy' уже является прямым базовым классом    d:\Users\Dima\Work\lib\structure\t_aggregator.h    17


OK. Пробую так:
template<class T1,class T2>
class t_aggregator:public T1,
                   public T2
{};

template<class T1,class T2,class T3>
class t_aggregator:public T1,
                   public T2,
                   public T3
{};

Получаю ошибку (для второго шаблона)
Ошибка 1 error C2977: structure::t_aggregator: слишком много аргументов шаблон    d:\Users\Dima\Work\lib\structure\t_aggregator.h    23


Вопрос — как эту задачу лучше всего решить:
— завести кучу t_dummy_1, t_dummy_2 ... t_dummy_N
— сделать уникальным имя агрегатора (по количеству аргументов) — t_aggregator_2, t_aggregator_3 ...
— оставить только агрегратор с двумя параметрами, и рекрусивно через него все прокручивать: t_aggregator<T1,t_aggregator<T2,t_aggregator<T3,T4> > >
— что-то еще?

Собственно вопрос задаю, чтобы свести мысли в кучу — сам сейчас склоняюсь ко второму варианту
-- Пользователи не приняли программу. Всех пришлось уничтожить. --
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.