【发布时间】:2018-11-30 22:49:00
【问题描述】:
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>
编辑: 我在摆弄,也许这样的东西会起作用:
以template... C 作为积分常量列表:
constexpr auto result = std::tuple_cat(std::conditional_t<(C::value > 3), std::tuple<C>, std::tuple<>>{}...);
【问题讨论】:
-
结果类型应该在编译类型时知道,你不能根据值这样做。
-
如果结果是
std::vector<int>是可能的。 -
但您可以将
template <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>>。 -
@Jarod42 如果这些值实际上是包装类型,那不可能吗?
-
` std::tuple
, int_c,int_c,int_c> 到 std::tuple ,int_c`
标签: c++ templates tuples c++17