技巧--结构化绑定中,可变长参数的类型提取
如有以下类:
template<typename... Args> class Tuple;
输入对应的序号,获得对应的类型。
// 结构化绑定中,对类型的推导。 template<size_t n, typename... Args> struct std::tuple_element<n, Tuple<Args...> > { using type = typename TpType<n, Tuple<Args...> >::type; };
TpTuple是一个高阶函数,当n==0的时候应该返回Tuple的第一个参数,如果不等于0的时候,应该进行递归,将其数值递减为0,并且Tuple的参数应该递减个数。
template<size_t N, typename T> struct TpType;
template<size_t N, typename T, typename... Args> struct TpType<N, Tuple<T, Args...> > { using type = typename TpType<N - 1, Tuple<Args...> >::type; }; template<typename T, typename... Args> struct TpType<0, Tuple<T, Args...> > { using type = T; };
每次递归N-1,并且Args包减去一个T类型。
请注意,sizeof...(Args)!=0 && N>0 && N<sizeof...(Args).