Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Шаблоны с переменным числом аргументов 
:(
    Опции темы
Ivan.
Дата 13.12.2016, 14:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 291
Регистрация: 2.11.2004

Репутация: 1
Всего: 2



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

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...>... > {};

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


--------------------
Я могу ВСЁ, вопрос - сколько времени у меня это займет!
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1117 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.