在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)
    }
}

(playground link)

有没有一种非unsafe的方法可以快速执行此转换?

推荐答案

每晚,有<[T]>::flatten()个.

在马厩上,尽管有 crate [例如slice-of-array个],但标准库中什么也没有.

无论如何,您的代码是可靠的.

Rust相关问答推荐

无法在线程之间安全地发送future (&Q;)&错误

如何处理动态 struct 实例化?

为什么我不能从带有字符串的 struct 的引用迭代器中收集VEC<;&;str&>?

如果成员都实现特征,是否在多态集合上实现部分重叠的特征?

支持TLS的模拟HTTP服务器

告诉Rust编译器返回值不包含构造函数中提供的引用

类型批注需要静态生存期

对于已经被认为是未定义行为的相同数据,纯粹存在`&;[u32]`和`&;mut[u32]`吗?

Rust&;Tokio:如何处理更多的信号,而不仅仅是SIGINT,即SIGQUE?

tokio::sync::broadcast::Receiver 不是克隆

如何限制 GtkColumnView 行数

在 Rust 中使用 `SecTrustSettingsSetTrustSettings` 绑定导致 `errSecInternalComponent`

如何获取函数中borrow 的切片的第一部分?

判断对象是 PyDatetime 还是 Pydate 的实例?

试图理解 Rust 中的可变闭包

如何在 Rust 中编写涉及异步的重试函数

相交着色器从 SSBO 中读取零

当用作函数参数时,不强制执行与绑定的关联类型

基于名称是否存在的条件编译

为移动和借位的所有组合实现 Add、Sub、Mul、Div