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

Aco*_*orn 5 c++ template-meta-programming variadic-templates

我有一个简单的 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>;
Run Code Online (Sandbox Code Playgroud)

我想找出T2typelist 内部类型的索引Types。这是我目前正在使用的,但是它仅在我搜索的类型位于类型列表的开头时才有效。否则,它编译时会出现错误“ value:未声明的标识符”。

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>
{
};
Run Code Online (Sandbox Code Playgroud)

jba*_*bab 4

你收到错误是因为

IndeOf<T, Ts...>::value
Run Code Online (Sandbox Code Playgroud)

未定义。它应该是

IndexOf<T, TypeList<Ts...>>::value
Run Code Online (Sandbox Code Playgroud)

反而。