切片整数参数包
Slice integer parameter pack
我有一个类,它[a,b,...,y,z]
获取整数参数包。我需要将其扩展为两个包[a,...,y]
和[b,...,z]
- 即删除一次第一个和一次最后一个。最终产品应该是一堆大小为[a,b]
、[b,c]
等的二维阵列,直到[x,y]
、[y,z]
。我正在尝试使用这样的东西:
std::tuple< std::array< std::array< int, /*RemoveFirst*/Ints>, /*RemoveLast*/Ints>...>
我也对其他解决方案持开放态度。
例:
template <int... Ints>
struct S {
std::tuple< std::array< std::array< int, /*RemoveFirst*/Ints>, /*RemoveLast*/Ints>...> t;
};
int main() {
S<2,3,4> a;
std::get<0>(a.t)[0][0] = 42;
// explenation:
// a.t is tuple<array<array<int,3>,2>,array<array<int,4>,3>>
// get<0>(a.t) is array<array<int,3>,2>
// get<0>(a.t)[0] is array<int,3>
// get<0>(a.t)[0][0] is int
}
我建议以下代码
#include <array>
#include <tuple>
#include <utility>
#include <type_traits>
template <typename T, std::size_t ... Is>
auto constexpr bar (std::index_sequence<Is...> const &)
{ return
std::tuple<
std::array<
std::array<int,
std::tuple_element_t<Is+1u, T>::value>,
std::tuple_element_t<Is, T>::value>...
>{}; }
template <std::size_t ... Is>
auto constexpr foo ()
{ return bar<std::tuple<std::integral_constant<std::size_t, Is>...>>
(std::make_index_sequence<sizeof...(Is)-1u>{}); }
int main ()
{
constexpr auto f = foo<2u, 3u, 5u, 7u, 11u>();
using typeTuple = std::tuple<
std::array<std::array<int, 3u>, 2u>,
std::array<std::array<int, 5u>, 3u>,
std::array<std::array<int, 7u>, 5u>,
std::array<std::array<int, 11u>, 7u>>;
static_assert( std::is_same<typeTuple const, decltype(f)>::value, "!" );
}
相关文章:
- 如何反转整数参数包
- 带有整数的变量参数列表
- Constexpr 可变参数模板,用于对无符号整数进行重新排序
- 从函数参数 [C++] 复制整数数组
- 使用可变参数函数将整数和/或整数数组放入单个 int 数组中
- 可变参数模板:将整数参数完美转发到 lambda
- (C/C++)fscanf_s从txt文件以字符形式读取数组时缺少整数参数错误
- 如何修改此函数,以便如果函数的参数是特定结构,则返回具有较大整数的结构?
- C++一个具有 2 个参数(___ _____,整数长度)的函数中的快速排序
- 切片整数参数包
- 将整数数组作为参数传递C++错误
- 反转模板(整数)参数的顺序
- C++ 构造函数参数:字符串、整数、整数、整数
- 如何避免字符串到整数转换情况下的无效参数异常
- 来自整数的variadic模板参数
- 模板参数中具有特殊整数的模板
- 在 lambda 中捕获参数包时,某些整数会丢失其值
- 整数模板参数和子函数调用
- 操作员与整数模板参数专业化过载
- 将方法指针作为整数参数发送到C#的C 方法