Исключить повторяющиеся записи из аргументов шаблона 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, удалить повторяющиеся записи в списке типов?Спасибо!