36

How to get the Nth type of variadic template templates? For example

template<typename... Args>
class MyClass
{
    Args[0] mA; // This is wrong. How to get the type?

};
Jonathan Leffler
  • 730,956
  • 141
  • 904
  • 1,278
user1899020
  • 13,167
  • 21
  • 79
  • 154

2 Answers2

48

You can use std::tuple:

#include<tuple>

template<typename... Args>
class MyClass
{
    typename std::tuple_element<0, std::tuple<Args...> >::type mA;
};
zch
  • 14,931
  • 2
  • 41
  • 49
14

If you want something without using std::tuple this works

template<std::size_t N, typename T, typename... types>
struct get_Nth_type
{
    using type = typename get_Nth_type<N - 1, types...>::type;
};

template<typename T, typename... types>
struct get_Nth_type<0, T, types...>
{
    using type = T;
};

Than

template<std::size_t N, typename... Args>
using get = typename get_Nth_type<N, Args...>::type;

template<typename... Args>
class MyClass
{
    get<0, Args...> mA;
};
etrusks
  • 165
  • 1
  • 8