我想初始化一个固定大小的数组,其中包含一些可为空、不可复制类型,例如Option<Box<Thing>>
这样的一些Thing
。我希望将其中两个打包到一个结构体中,而不需要任何额外的间接性。我想写出如下代码:
let array: [Option<Box<Thing>>; SIZE] = [None; SIZE];
但它不起作用,因为[e;n]
语法要求e
实现Copy
。当然,我可以将其扩展为SIZE None
,但是当SIZE
很大时,这可能会变得笨拙。我不相信可以使用宏来完成这个操作,而不需要对SIZE
进行unnatural的编码。有没有一个好方法可以做到这一点?
是的,使用unsafe
很容易;但是否有一种不使用unsafe
的方法呢?
[Option<Box<T>>; N]
,您可以使用从[0; N]
转换的transmute:http://is.gd/CC31YQ - oli_obk