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 37
|
#include "typelist.h"
//LISTSEARCH
template <typename ...Types>
struct ListSearch
{
ListSearch(ListSearch const &) = delete;
};
//=
//EMPTY
template <typename SearchType>
struct ListSearch<SearchType, TypeList<>>
{
ListSearch(ListSearch const &) = delete;
enum { index = -1 };
};
//=
//TAIL
template <typename SearchType, typename ...Tail>
struct ListSearch<SearchType, TypeList<SearchType, Tail...>>
{
ListSearch(ListSearch const &) = delete;
enum { index = 0 };
};
//=
//FULL
template <typename SearchType, typename Head, typename ...Tail>
struct ListSearch<SearchType, TypeList<Head, Tail...> >
{
ListSearch(ListSearch const &) = delete;
enum {tmp = ListSearch<SearchType, TypeList<Tail...>>::index};
enum {index = tmp == -1 ? -1 : 1 + tmp};
};
//=
|