Мы могли бы использовать «петлю».Это вернет индекс last , соответствующий элементу с данным типом.
template <typename T, typename S, int i = std::tr1::tuple_size<T>::value - 1>
struct tuple_index
{
enum
{
value = std::tr1::is_same<typename std::tr1::tuple_element<i, T>::type, S>::value ?
i :
tuple_index<T, S, i-1>::value
};
};
template <typename T, typename S>
struct tuple_index<T, S, -1>
{
enum { value = -1 };
};
Пример:
printf("%d\n", tuple_index<std::tr1::tuple<int, double>, int>::value); // 0
printf("%d\n", tuple_index<std::tr1::tuple<int, double>, double>::value); // 1
printf("%d\n", tuple_index<std::tr1::tuple<int, double>, long>::value); // -1