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 32 33 34 35 36
|
#ifndef INCLUDED_TYPEAT_H_
#define INCLUDED_TYPEAT_H_
#include "typelist.h"
//TYPEAT
template <size_t index, typename Typelist>
struct TypeAt;
//=
//INVALID
template <size_t index>
struct TypeAt<index, TypeList<>>
{
static_assert(index < 0, "TypeAt index out of bounds");
typedef TypeAt Type;
};
//=
//ZERO
template <typename Head, typename ...Tail>
struct TypeAt<0, TypeList<Head, Tail...>>
{
typedef Head Type;
};
//=
//TYPELIST
template <size_t index, typename Head, typename ...Tail>
struct TypeAt<index, TypeList<Head, Tail...>>
{
typedef typename TypeAt<index - 1, TypeList<Tail...>>::Type Type;
};
//=
#endif
|