Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > Шаблоны с переменным числом аргументов


Автор: Ivan. 13.12.2016, 14:41
Здравствуйте коллеги.
Хочу немного заморочить голову. Представьте, что есть такой шаблонный класс:
Код

template<class... T>
struct Q;
//И его специализация
template<template<int> class... T, int v>
struct Q < T<v>... > {};

То есть класс Q принимает переменное число различных шаблонных типов имеющих одинаковую структуру шаблона T<int> с одинаковым v

например:
Код

Q< T1<1>, T2<1>, T1<1> > q;

А если нам нужно принять различные типы T с разными v:
Код

template<template<int> class... T, int... v>
struct Q < T<v>... > {
    int list[sizeof...(v)] = {v...};
};
Удивительно, но получается, что для каждого T есть свой v, который можно пощупать:
Код

Q< T1<1>, T2<2>, T1<3> > q;
list будет содержать значения 1, 2, 3.

Следующий вариант, где каждый тип T основан на нескольких аргументах:
Код

template<template<int...> class... T, int... v>
struct Q < T<v...>... > {
    int list[sizeof...(v)] = {v...};
};
Q< T1<1, 2, 3>, T2<1, 2, 3>, T1<1, 2, 3> > q;
Здесь T разные, но списки v в них одинаковые
list будет содержать значения 1, 2, 3

А теперь главный вопрос, как сделать специализацию, где для каждого T будет свой список v?
Код

template<template<int...> class... T, int ...(...v)>
struct Q < T<v...>... > {};

К сожалению компилятор ругается

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)