Исключить повторяющиеся записи из аргументов шаблона C ++ 11

m использование шаблонов с переменным виртуальным наследованием в C ++ для объединения типов в единое определение структуры.

Вот примерный набор структур:

struct meas { int i; };
struct meas2 : public virtual meas { int j; };
struct meas3 : public virtual meas { int k; };

Затем я объединяю их, используя множественное виртуальное наследование:

template 
struct zipper : public virtual Args... {};

Тогда я могу сделать:

typedef zipper meas_type;
meas* m = new meas_type;

Затем они могут каскадно:

typedef zipper meas_type2;

Получающийся объект, однако, довольно громоздкий:

$46 = (zipper) {
   = {
     = {
      i = 0
    }, 
    members of meas3: 
    _vptr.meas3 = 0x400ec8, 
    k = 0
  }, 
   = {
     = {
      members of meas2: 
      _vptr.meas2 = 0x400ee0, 
      j = 6299120
    }, 
    members of zipper: 
    _vptr.zipper = 0x400eb0
  }, }

в соответствии с GDB.

Существует также вторичная проблема при попытке заархивировать тот же базовый тип:

typedef zipper meas_type2;

Выше выдает ошибку компиляторадубликат базового классатез является недействительным" под G ++ 4.6.3.

Таким образом, вопрос состоит из двух частей:

Есть ли способ преобразоватьzipper в?zipperЕсть ли способ, выполняя # 1, удалить повторяющиеся записи в списке типов?

Спасибо!

Ответы на вопрос(1)

Ваш ответ на вопрос