如何从元组中获得第N类?

use*_*677 17 c++ templates c++11 stdtuple

我想创建一个模板,我可以在其中输入索引,它将为我提供该索引的类型.我知道我可以这样做,decltype(std::get<N>(tup))但我想自己实现.例如,我想这样做,

typename get<N, std::tuple<int, bool, std::string>>::type;
Run Code Online (Sandbox Code Playgroud)

...它会给我位置的类型N - 1(因为数组从0开始索引).我怎样才能做到这一点?谢谢.

And*_*owl 15

这个特征已经存在,并且被称为std::tuple_element.

这是一个演示其用法的实例.


0x4*_*2D2 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
}
Run Code Online (Sandbox Code Playgroud)