我有一个简单的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>
{
};
答案 0 :(得分:4)
您收到错误是因为
IndeOf<T, Ts...>::value
未定义。 它应该是
IndexOf<T, TypeList<Ts...>>::value
代替。