Извлечь пакет параметров шаблона переменной и использовать его в другом шаблоне переменной в мета-функции черт типа? - PullRequest
5 голосов
/ 21 мая 2011

Я хочу определить, является ли какой-либо шаблон класса variadic основой другого класса.Обычно я бы использовал std :: is_base_of, но я не думаю, что мой вариант использования подходит, и я не уверен, есть ли уже что-то в std или boost для этого.Я хочу, чтобы пакет параметров шаблона базового класса с переменными параметрами пришел из другого шаблона класса с переменными параметрами.Вот пример кода, который, надеюсь, объясняет, что я хочу сделать:

Использование:

is_variadic_base_of<
   VarClassTemplA
   , ClassDerivedFromA
   , VarClassTemplB //Has param pack I want to use with ClassA
>::value;

Мужество:

//test for variadic base of non-variadic
template <template<typename...> class A, typename B, typename... ArgsC>
struct is_variadic_base_of
: std::is_base_of<A<ArgsC...>, B>
{};

Возможно ли это?

Ответы [ 2 ]

6 голосов
/ 21 мая 2011
template <template<typename...> class A, typename B, typename ArgsC>
struct is_variadic_base_of;

template <template<typename...> class A, typename B, 
          template<typename...> class C, typename ...ArgsC>
struct is_variadic_base_of<A, B, C<ArgsC...>> 
: std::is_base_of<A<ArgsC...>, B>
{};

Надеюсь, это поможет!

4 голосов
/ 21 мая 2011

Вы почти у цели, но попробуйте с частичной специализацией:

template<
    template<class...> class A, class B, class C
>
struct is_variadic_base_of;

// partial spec
template<
    template<class...> class A, class B,
    template<class...> class C, class... ArgsC
>
struct is_variadic_base_of< A,B,C<ArgsC...> >
  : std::is_base_of< A<ArgsC...>,B >
{};
...