How to get N-th type from a tuple?

大兔子大兔子 提交于 2019-11-30 00:50:56

问题


I want to make a template where I can input an index and it will give me the type at that index. I know I can do this with decltype(std::get<N>(tup)) but I would like to implement this myself. For example, I would like to do this,

typename get<N, std::tuple<int, bool, std::string>>::type;

...and it will give me the type at position N - 1 (because arrays indexed starting from 0). How can I do this? Thanks.


回答1:


You can use a class template and partial specializations to do what you want. (Note that std::tuple_element does almost the same like the other answer says):

#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
}



回答2:


That trait already exists, and it is called std::tuple_element.

Here is a live example that demonstrates its usage.



来源:https://stackoverflow.com/questions/16928669/how-to-get-n-th-type-from-a-tuple

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!