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> {}
}
to
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<>>{}...);
std::vector<int>
,那么这是可能的。 - Maxim Egorushkintemplate <std::size_t N>using int_c = std::integral_constant<int, N>; std::tuple<int_c<1>, int_c<3>,int_c<4>,int_c<5>>
转换为std::tuple<int_c<4>,int_c<5>>
。 - Jarod42std::tuple<int_c<1>, int_c<3>,int_c<4>,int_c<5>>
转换为std::tuple<int_c<4>,int_c<5>>
是可行的! - themagicalyang