【发布时间】:2020-05-05 20:22:06
【问题描述】:
我有一个接收参数包的结构。假设参数包的大小永远不会小于 3。此外,结构中的std::array 应该在编译时进行评估。我想使用参数包填充数组,但我想跳过第一个和最后一个元素。
这是我的代码:
#include <iostream>
#include <array>
#include <cstdint>
template<int32_t ...Ts>
struct St {
const std::array<int32_t, sizeof...(Ts)-2U> arr{};
};
int main() {
constexpr St<7, 2, 1, 5, 6> s;
std::cout << s.arr[2] << std::endl;
return 0;
}
理想情况下,我想使用带有 [1, sizeof_parameter_pack - 1] 或 [0, size_of_parameter_pack - 2] 的元素的 std::index_sequence 和折叠表达式来填充数组。但是,我正在努力创建 index_sequence。我不希望结构接收另一个模板参数。我怎样才能做到这一点?
【问题讨论】:
-
我可能误解了一些东西,但我认为
arr应该是 const 因为会有更多相同结构的对象 -
对不起,我的错误。修好了!
标签: c++ algorithm templates c++17 metaprogramming