15

次のようなさまざまな要素タイプのタプルがある場合

std::tuple<T0, T1, T2, ...>

要素タイプのインデックスを取得する方法は?

template<class T, class Tuple>
struct Index
{
    enum {value = ?;}
};

ありがとう。

4

5 に答える 5

35
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;
};

Coliru でライブをご覧ください

この実装は、特定の型が最初に出現したインデックスを返します。タプルに含まれていない型のインデックスを要求すると、コンパイル エラーが発生します (かなり見苦しいものです)。

于 2013-08-05T16:59:33.003 に答える