gpt4 book ai didi

c++ - std::array 聚合初始化和模板整数类型

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

来自documentation std::array,我们发现它可以按如下方式初始化(​​使用聚合初始化):

struct S {
S(): arr{0,1} { }
std::array<int,2> arr;
};

无论如何,在这种情况下会出现一个问题:

template<int N>
struct S {
S(): arr{/*??*/} { }
std::array<int,N> arr;
};

如何在构造 s 时初始化数组(例如值从 0N-1 或使用 constexpr将索引传递给的函数)?

最佳答案

看看 std::iota 的大量未充分利用的力量:

template <int N>
struct S {
S() {
std::iota(arr.begin(), arr.end(), 0);
}

std::array<int, N> arr;
};

虽然如果你真的想使用聚合初始化,总有 std::integer_sequence (需要 C++14,但在 SO 上有很多 C++11 解决方案):

template <int N>
struct S {
S() : S(std::make_integer_sequence<int, N>{}) {}

std::array<int, N> arr;
private:
template <int... Is>
S(std::integer_sequence<int, Is...> )
: arr{Is...}
{ }
};

关于c++ - std::array 聚合初始化和模板整数类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36239294/

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