gpt4 book ai didi

rust - 使用非复制类型初始化一个大的、固定大小的数组

转载 作者:行者123 更新时间:2023-11-29 08:20:34 25 4
gpt4 key购买 nike

我正在尝试初始化一些可空、不可复制类型的固定大小数组,例如 Option<Box<Thing>>对于某种 Thing .我想将其中两个打包到一个结构中,而无需任何额外的间接访问。我想写这样的东西:

let array: [Option<Box<Thing>>; SIZE] = [None; SIZE];

但它不起作用,因为 [e; n]语法要求 e工具 Copy .当然,我可以将其扩展为 SIZE None s,但是当 SIZE 时这可能很笨重很大。我不相信这可以用没有 SIZE 的不自然编码的宏来完成。 .有什么好的方法吗?

是的,使用 unsafe 很容易;有没有办法不用 unsafe

最佳答案

从 Rust 1.38(2019 年 9 月发布)开始,可以使用中间 const 初始化程序来替代先前发布的答案。这种方法适用于任何大小的数组:

const SIZE: usize = 100;
const INIT: Option<Box<Thing>> = None;
let array: [Option<Box<Thing>>; SIZE] = [INIT; SIZE];

(无论是否使用 Box,它都适用;该示例使用 Box,因为它已在问题中使用。)

一个限制是数组项必须有一个可以在编译时评估的默认表示——常量、枚举变体或由它们组成的原始容器。 None 或数字元组将起作用,但非空的 VecString 将不起作用。

关于rust - 使用非复制类型初始化一个大的、固定大小的数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50669013/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com