1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
|
template <typename T, int i, bool>
struct S {
static typename std::tuple_element<i, decltype(T::typelist)>::type actualType = std::tuple_element<i, decltype(T::typelist)>();
};
template<>
template<typename T, int i>
struct S<T, i, false>
{
static void get(int n, T& result)
{
//assert(false);
}
};
template <typename T, int i>
struct S<T, i, true> {
static void get(int n, T& result) {
switch(n) {
case 0 : {
actualType = std::get<i>(T::typelist);
break;
}
default : {
constexpr bool isGreater = (std::tuple_size<decltype(T::typelist)>::value > i + 1);
return S<T, i+1, isGreater>::get(n-1, result);
break;
}
}
}
static typename std::tuple_element<i, decltype(T::typelist)>::type actualType;
}; |
Partager