获取元组元素类型的索引?

use*_*020 11 c++ templates tuples

如果我有一个元组类型不同的元组

std::tuple<T0, T1, T2, ...>
Run Code Online (Sandbox Code Playgroud)

以及如何获取元素类型的索引?

template<class T, class Tuple>
struct Index
{
    enum {value = ?;}
};
Run Code Online (Sandbox Code Playgroud)

谢谢.

Cas*_*sey 20

template <class T, class Tuple>
struct Index;

template <class T, class... Types>
struct Index<T, std::tuple<T, Types...>> {
    static const std::size_t value = 0;
};

template <class T, class U, class... Types>
struct Index<T, std::tuple<U, Types...>> {
    static const std::size_t value = 1 + Index<T, std::tuple<Types...>>::value;
};
Run Code Online (Sandbox Code Playgroud)

在Coliru现场观看.

此实现返回给定类型第一次出现的索引.请求不在元组中的类型的索引会导致编译错误(并且在那个问题上相当丑陋).

  • @ user1899020尝试更改实际表达式中的类型,而不是输出字符串. (4认同)