gpt4 book ai didi

c++ - 在 C++17 中过滤类型元组

转载 作者:搜寻专家 更新时间:2023-10-31 00:52:43 24 4
gpt4 key购买 nike

std::tuple a{1,3,4,5} -> 使其大于 3

std::tuple b{4,5}    

或者

std::tuple a{
std::integral_constant<int,1> {},
std::integral_constant<int,3> {},
std::integral_constant<int,4> {},
std::integral_constant<int,5> {}
}

std::tuple a{
std::integral_constant<int,4>{},
std::integral_constant<int,5>{}
};

如何在编译时转换它?我可以使用 integer_sequence 来做到这一点但那很麻烦。在 C++17 中是否有更简单的方法使用折叠表达式或 std::apply

同样在过滤之后,还需要得到一个唯一条目的元组。但我的假设是,如果可以进行过滤,那么找到唯一性将是微不足道的。

编辑以便更清楚: std::tuple<int_c<1>, int_c<3>,int_c<4>,int_c<5>> to std::tuple<int_c<4>,int_c<5> <-- 如果在没有额外声明函数的情况下以简洁的 c++17 方式实现,那就行了!

编辑:我在摆弄,也许这样的事情会奏效:

template... C作为积分常数列表:

constexpr auto result = std::tuple_cat(std::conditional_t<(C::value > 3), std::tuple<C>, std::tuple<>>{}...);

最佳答案

用 c++17 生成你的 tuple_cat:

constexpr auto result = std::apply([](auto...ts) {
return std::tuple_cat(std::conditional_t<(decltype(ts)::value > 3),
std::tuple<decltype(ts)>,
std::tuple<>>{}...);
}, tup);

关于c++ - 在 C++17 中过滤类型元组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50971320/

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