获取类型列表中的类型索引

时间:2017-01-10 22:21:31

标签: c++ variadic-templates template-meta-programming

我有一个简单的TypeList实现,如下所示:

template<typename... Ts>
struct TypeList
{
    static constexpr std::size_t size{ sizeof... (Ts) };
};

struct T1
    {
    };

struct T2
        {
        };

struct T3
        {
        };

using Types = mpl::TypeList<T1, T2, T3>;

我想弄清楚类型列表T2中类型Types的索引。 这是我目前正在使用的,但它只有在我搜索的类型位于类型列表的开头时才有效。否则,它会编译错误&#34; value:未声明的标识符&#34;。

template<typename, typename>
struct IndexOf {};

// IndexOf base case: found the type we're looking for.
template <typename T, typename... Ts>
struct IndexOf<T, TypeList<T, Ts...>>
    : std::integral_constant<std::size_t, 0>
{
};



// IndexOf recursive case: 1 + IndexOf the rest of the types.
template <typename T, typename TOther, typename... Ts>
struct IndexOf<T, TypeList<TOther, Ts...>>
    : std::integral_constant<std::size_t,
    1 + IndexOf<T, Ts...>::value>
{
};

1 个答案:

答案 0 :(得分:4)

您收到错误是因为

IndeOf<T, Ts...>::value

未定义。 它应该是

IndexOf<T, TypeList<Ts...>>::value

代替。