gpt4 book ai didi

c++ - 用递增的数字初始化一个编译时常量大小的数组

转载 作者:行者123 更新时间:2023-11-30 01:35:21 25 4
gpt4 key购买 nike

我有一个数组,其大小是使用编译时常量设置的(在我的例子中是预处理器 #define)。我需要在编译时使用连续的数字对其进行初始化。我该怎么做?

简化示例:

#define ARR_SZ 5
struct C {
C(int a) : a(a) {}
int a;
};
C arr[ARR_SZ] = {{0},{1},{2},{3},{4}}; // This needs to adapt to any number

我可以使用 C++11,但不能使用更新的(尽管我有兴趣学习更新的技术,即使我不能在这个项目中使用它们)

最佳答案

C++14 代码(因为 std::integer_sequence):

#include <type_traits>
#include <array>

#define ARR_SZ 5
struct C {
C(int a) : a(a) {}
int a;
};

template<int ...Is>
auto make_C_arr(std::integer_sequence<int, Is...>) -> std::array<C, sizeof...(Is)> {
return {{ {Is}... }};
}

auto arr = make_C_arr(std::make_integer_sequence<int, ARR_SZ>{});

int main () {

}

std::integer_sequence 等可在 C++11 中实现,但如评论中所述,因此用标准版本替换自制版本将提供特定于 C++11 的版本解决方案。

关于c++ - 用递增的数字初始化一个编译时常量大小的数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54286610/

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