首页 > 解决方案 > 如何将 f64 数组重新解释为 f64 元素的元组?

问题描述

我有一个代码生成器,它产生对返回的函数的调用Vec<f64>。我需要将这些值分配给一组变量,最好的方法似乎是这些变量的元组。像这样的东西:

let array: &[f64] = &my_function(3);
let (a, b, c): (f64, f64, f64) = unsafe { std::mem::transmute(*array) };

游乐场(不可编译)

我不知道如何编写不安全的部分以使其被编译器接受。

我更愿意避免为每个项目分配生成项目,因为性能在这里非常重要。

这可以做到吗?元组的内存布局是否与数组兼容?

标签: arraysrusttuples

解决方案


你不能这样做,期间;元组没有保证的内存布局,因此你不能从可能匹配或不匹配的东西中转换。

我会做正常的模式匹配:

fn main() {
    let values = my_function(3);
    dbg!(&values);
    let (a, b, c) = match &*values {
        [a, b, c] => (a, b, c),
        _ => panic!(),
    };
    dbg!(a, b, c);
}

fn my_function(count: usize) -> Vec<f64> {
    vec![3.14_0f64; count]
}

也可以看看:


推荐阅读