技巧--结构化绑定中,可变长参数的类型提取

如有以下类:

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).

 

posted @ 2025-05-03 12:04  大笨瓜  阅读(10)  评论(0)    收藏  举报