[英]how can I create a throwaway mutable reference?
我试图包装一个向量来改变它的索引行为,这样当发生越界访问时,它不会恐慌,而是返回对虚拟值的引用,如下所示:
use std::ops::Index;
struct VecWrapper(Vec<()>);
impl Index<usize> for VecWrapper {
type Output = ();
fn index(&self, idx: usize) -> &() {
if idx < self.0.len() {
&self.0[idx]
} else {
&()
}
}
}
这对于 Index 的实现来说工作得很好,但是由于显而易见的原因,尝试以相同的方式实现 IndexMut 失败了。 我的集合中的类型没有 Drop 实现,因此不需要调用析构函数(释放内存除外)。
我能想到的唯一解决方案是拥有一个包含数千个虚拟对象的 static 可变数组,并分发对该数组元素的引用,这是一个可怕的解决方案,但如果借用的虚拟对象数量超过了大小,它仍然会导致 UB static 数组。
为包装器提供一个附加字段,即虚拟字段。 它具有相同的生命周期限制,因此不能使用别名。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.