作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个数组,其大小是使用编译时常量设置的(在我的例子中是预处理器 #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/
我是一名优秀的程序员,十分优秀!