当前位置: 首页 > 知识库问答 >
问题:

如何从元组中获得第n个类型?

景书
2023-03-14

我想做一个模板,在那里我可以输入一个索引,它会给我在那个索引的类型。我知道我可以用decltype(std::get (tup)) 来实现,但我想自己实现它。例如,我想这样做,

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

...它会给出位置n-1的类型(因为数组是从0开始索引的)。我怎么能这么做?多谢了。

共有1个答案

齐博厚
2023-03-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
}
 类似资料:
  • 我正在使用Javascript(ES6)/FacebookReact,并尝试获得大小不同的数组的前3个元素。我想做与Linq take(n)等价的操作。 在我的Jsx文件中,我有以下内容: 然后我尝试了前3个项目 这不起作用,因为地图没有一个设置的函数。 你能帮忙吗?

  • 返回数组中的每个第 n 个元素。 使用 Array.filter() 创建一个包含给定数组的每个第 n 个元素的新数组。 const everyNth = (arr, nth) => arr.filter((e, i) => i % nth === nth - 1); everyNth([1, 2, 3, 4, 5, 6], 2); // [ 2, 4, 6 ]

  • 问题内容: 我正在使用Javascript(ES6)/ FaceBook进行反应,并尝试获取大小变化的数组的前3个元素。我想做相当于Linq take(n)。 在我的Jsx文件中,我有以下内容: 然后得到我尝试的前三个项目 这不起作用,因为地图没有设置功能。 你能帮忙吗? 问题答案: 我相信您正在寻找的是:

  • 问题内容: 我正在研究“如何从javascript中的数组随机访问元素”。我发现了许多与此有关的链接。 问题: 但是在这种情况下,我们只能从数组中选择一项,如果我们想要多个元素,那么我们将如何实现这一点,所以请仅从该语句中获取一个数组中的多个元素。 问题答案: 尝试以下无损快速功能:

  • 我试图从一个整数数组中得到第n个位置值。我的输入JSON: 我的输入JsonPath: $. data[?(( @.状态!=null) 预期输出: 但是得到了: 那么如何在jsonpath中获得我的期望值呢?我正在使用这个工具。