gpt4 book ai didi

c++ - 使用 integer_sequence 过滤元组

转载 作者:太空狗 更新时间:2023-10-29 20:56:20 28 4
gpt4 key购买 nike

#include <tuple>
#include <utility>
using namespace std;

template <size_t... Indices, class F, class T>
auto map_filter_tuple(F f, T &t) {
return make_tuple(f(std::get<Indices>(t))...);
}

int main()
{
auto times2 = [](auto i) { return i * 2; };
auto t = make_tuple(1, 2, 3, 4);
auto t2 = map_filter_tuple<0, 1, 2>(times2, t);
}

这行得通,但我想知道如何将 integer_sequence 传递给 map_filter_tuple

auto t3 = map_filter_tuple<std::integer_sequence<size_t,0,1,2>>(times2,t);

我查看了 integer_sequence 的源代码,它没有公开可变参数模板。

我想我必须使用特化?我只是不确定我将如何处理它。

最佳答案

template <std::size_t... Is, typename F, typename T>
auto map_filter_tuple(F f, T& t)
{
return std::make_tuple(f(std::get<Is>(t))...);
}

template <std::size_t... Is, typename F, typename T>
auto map_filter_tuple(std::index_sequence<Is...>, F f, T& t)
{
return std::make_tuple(f(std::get<Is>(t))...);
}

template <typename S, typename F, typename T>
auto map_filter_tuple(F&& f, T& t)
{
return map_filter_tuple(S{}, std::forward<F>(f), t);
}

DEMO

关于c++ - 使用 integer_sequence 过滤元组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33844831/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com