在Rust中,我有一个具有常量泛型大小的正方形多维数组:
fn generate_array<const N: usize>() -> [[u32; N]; N] {
// ...
}
我想将这个数组传递给一个接受一维数组的库:
fn library_function(width: usize, height: usize, data: &[u32]);
我的数组不会强制为&[u32]
,所以我不能只传递一个引用.我知道这个should是一个微不足道的转换,但我找不到一个惯用的方法来做它.从this post开始,我创建了一个函数来从原始指针构造切片,但我不确定是否有某些类型的切片是无效的.
const fn as_flat_slice<const N: usize, T>(arr: &[[T; N]; N]) -> &[T] {
unsafe {
std::slice::from_raw_parts(arr.as_ptr() as *const _, N * N)
}
}
有没有一种非unsafe
的方法可以快速执行此转换?