stdlib是否提供类型列表?

sbi*_*sbi 5 c++ c++-standard-library template-meta-programming

在现代C ++中,标准库是否提供类型列表模板?

int main() {
    using int_types = type_list<int,long,short,char>;
    std::cout << length<int_types>::value << ' '
              << typeid(element<2,int_types>::type).name();
}
Run Code Online (Sandbox Code Playgroud)

请注意,int_types它不存储任何值(std::tuple与之相同)。它只是类型列表。

sbi*_*sbi 0

最后,我做了这样的事情:

template<typename ...T> struct type_list {};

template<typename    L> struct length;
template<typename ...T> struct length<type_list<T...>> {static const std::size_t value=sizeof...(T);};

template<std::size_t I, typename L>
struct element;
template<typename F, typename ...T> 
struct element<0, type_list<F, T...>> {using type=F;};
template<std::size_t I> 
struct element<I, type_list<>>        {using type=void;};
template<std::size_t I, typename F, typename ...T> 
struct element<I, type_list<F, T...>> {using type=typename element<I-1,type_list<T...>>::type;};

int main() {
    using int_types = type_list<int,long,short,char>;
    std::cout << length<int_types>::value << '\n'
              << typeid(element<2,int_types>::type).name() << '\n';
    return 0;
}
Run Code Online (Sandbox Code Playgroud)