tuple没有提供方法可以获取某个类型在tuple中的索引,借助模板推到,我们可以自己实现一个:
#include <iostream>
#include <tuple>
using namespace std;
template<class T, size_t N, class... Args>
struct get_index_of_element_from_tuple_by_type
{
static constexpr auto value = N;
};
template<class T, size_t N, class... Args>
struct get_index_of_element_from_tuple_by_type<T, N, T, Args...> //T与tuple中要查找的T匹配
{
static constexpr auto value = N;
};
template<class T, size_t N, class U, class... Args>
struct get_index_of_element_from_tuple_by_type<T, N, U, Args...> //T与tuple的第一个类型U不匹配,弹出U,N+1,递归调用get_index_of_element_from_tuple_by_type
{
static constexpr auto value = get_index_of_element_from_tuple_by_type<T, N + 1, Args...>::value;
};
template<class T, class... Args>
T& get_tuple_element_by_type(tuple<Args...>& t)
{
return get<get_index_of_ele