【发布时间】:2023-03-10 16:17:02
【问题描述】:
我正在使用 lodepng-rust 编写图像,我想使用像素而不是 u8s。我已经创建了一个结构
struct Pixel {r: u8, g: u8, b: u8}
并且正在从数组的元素中构建一个u8s 数组。由于我现在正在手工制作阵列,所以我处于需要手工制作另一个阵列的奇怪情况。有没有办法在编译时创建一个长度是像素数组长度的三倍的数组?类似的东西
let data: [u8; other_array.len()*3];
这不起作用,因为.len() 不是编译时间常数。在这种情况下,运行时成本对我来说并不重要,但如果我能拥有相关的尺寸,它会感觉更干净(而且我将来可能需要性能)。
编辑:
我正在使用的解决方案是基于 Levans 的回答。 对于不手动初始化数组的人,请按照 Levans 进行操作。我手动初始化我的第一个数组,但将类型设置为使用 pixel_count 中指定的长度,这样它就会捕获错误的 @ 987654327@ 在编译时。我使用该常数创建第二个数组,然后断言长度具有正确的比率。我的最小示例如下所示:
struct Pixel {r: u8, g: u8, b: u8}
const pixel_count: usize = 4;
fn main() {
let pixel_data = [Pixel; pixel_count] = [
Pixel {r: 255, g: 0, b: 0},
Pixel {r: 0, g: 255, b: 0},
Pixel {r: 0, g: 0, b: 255},
Pixel {r: 0, g: 99, b: 99},
];
let mut data = [0u8; pixel_count*3];
assert_eq!(pixel_data.len()*3, data.len());
}
【问题讨论】:
标签: arrays rust compile-time