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与之相同)。它只是类型列表。
最后,我做了这样的事情:
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)