我想创建一个模板,我可以在其中输入索引,它将为我提供该索引的类型。我知道我可以用decltype(std::get<N>(tup))
做到这一点,但我想自己实现。例如,我想这样做,
typename get<N, std::tuple<int, bool, std::string>>::type;
...它会给我位置N - 1
的类型(因为数组从0开始索引)。我怎样才能做到这一点?感谢。
答案 0 :(得分:14)
该特征已经存在,它被称为std::tuple_element
。
这是展示其用法的live example。
答案 1 :(得分:14)
您可以使用类模板和部分特化来执行您想要的操作。 (请注意,std::tuple_element
几乎与其他答案相同):
#include <tuple>
#include <type_traits>
template <int N, typename... Ts>
struct get;
template <int N, typename T, typename... Ts>
struct get<N, std::tuple<T, Ts...>>
{
using type = typename get<N - 1, std::tuple<Ts...>>::type;
};
template <typename T, typename... Ts>
struct get<0, std::tuple<T, Ts...>>
{
using type = T;
};
int main()
{
using var = std::tuple<int, bool, std::string>;
using type = get<2, var>::type;
static_assert(std::is_same<type, std::string>::value, ""); // works
}