#include <iostream>
// 定义类型序列
template<typename... Types>
struct TypeSequence { };
// 辅助结构体,用于获取第N个类型
template<size_t N, typename... Types>
struct GetTypeAt;
// 偏特化版本,当N为0时,返回第一个类型
template<typename Head, typename... Tail>
struct GetTypeAt<0, Head, Tail...> {
using type = Head;
};
// 递归偏特化版本,N > 0时,从剩余类型中获取第N - 1个类型
template<size_t N, typename Head, typename... Tail>
struct GetTypeAt<N, Head, Tail...> {
using type = typename GetTypeAt<N - 1, Tail...>::type;
};
int main() {
// 定义一个类型序列
using MyTypeSequence = TypeSequence<int, float, double, char>;
// 获取第2个类型(从0开始计数)
using SecondType = typename GetTypeAt<2, int, float, double, char>::type;
SecondType value = 3.14; // 这里SecondType是double
std::cout << value << std::endl;
return 0;
}
使用说明
- 定义类型序列:通过
TypeSequence<int, float, double, char>
这样的方式定义一个类型序列。
- 获取第N个类型:使用
GetTypeAt<N, Types...>::type
的方式获取类型序列中的第N个类型,其中N
是从0开始计数的索引,Types...
是类型序列中的所有类型。例如GetTypeAt<2, int, float, double, char>::type
会获取到double
类型。在实际使用中,可以像示例代码那样先定义一个类型序列别名,然后再使用GetTypeAt
获取指定位置的类型。