1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
|
template<typename Tag, size_t P, size_t N, typename ... T>
struct Tag2IDHelper;
template<typename Tag, size_t N, typename T>
struct Tag2IDHelper<Tag, N, N, T>
{
constexpr static size_t Pos = std::is_same_v<Tag, T> ? N - 1 : -1;
};
template<typename Tag, size_t P, size_t N, typename Head, typename... Tail>
struct Tag2IDHelper<Tag, P, N, Head, Tail...>
{
constexpr static size_t Pos = std::is_same<Tag, Head>::value ? P : Tag2IDHelper<Tag, P + 1, N, Tail...>::Pos;
};
|