2014-01-17 4 views
1

Я пытаюсь хранить вариативные аргументы шаблона в одном классе шаблонов и использовать их в другом. Что-то вроде:Хранить переменные шаблоны args и использовать их в другом классе

template<typename... Args> 
struct A{ 
    typedef Args... type; // heh 
}; 

template<typename A_T> 
struct B{ 
    void foo(A_T::type... args){} 
}; 


B<A<int,int> > b; 
b.foo(2,3); 

Вся помощь приветствуется!

+3

Что об использовании кортежа? Например, см. [Возможно ли «сохранить» пакет параметров шаблона без его расширения?] (Https://stackoverflow.com/questions/4691657/is-it-possible-to-store-a-template-parameter- pack-without-expand-it? rq = 1) –

+0

приятно, но как бы вы извлекли пакет параметров? –

+0

http://www.cplusplus.com/reference/tuple/ – Gasim

ответ

3

Вы не можете определить тип такого типа! Как предложено во всех комментариях std::tuple - это правильный способ иметь тип продукта.

typedef std::tuple<Args...> type; // instead of typedef Args... type; 

Для достижения вызова

B<A<int,int> > b; 
b.foo(2,3); 

Вы можете немного изменить свой код как

template<typename... Args> 
struct A{ 
}; 

template<typename A_T> 
struct B{ 
}; 

template<template<typename...> class A_T, typename... Args> 
struct B<A_T<Args...>>{ 
    void foo(Args... args){ 
    } 
}; 
+0

Ницца! К сожалению, мне нужно решение, которое берет какой-то тип или список типов из A_T. –

+0

@JanekOlszak Можете ли вы уточнить. Что именно вы пытаетесь извлечь из пакета параметров? – 0x499602D2

+0

Это часть моей библиотеки нейронных сетей. Обучение происходит в методе learn (..), который может принимать другой список параметров (в зависимости от того, как мы решаем преподавать сеть). –

Смежные вопросы